第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用值對(duì)std :: map進(jìn)行排序

使用值對(duì)std :: map進(jìn)行排序

C++
守候你守候我 2019-08-26 19:12:05
使用值對(duì)std :: map進(jìn)行排序我需要std::map按值而不是按鍵排序。有一個(gè)簡(jiǎn)單的方法嗎?map<long, double> testMap;// some code to generate the values in the map.sort(testMap.begin(), testMap.end());  // is there any function like this to sort the map?
查看完整描述

3 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

盡管已經(jīng)發(fā)布了正確答案,但我想我會(huì)添加一個(gè)如何干凈利落地演示的演示:

template<typename A, typename B>std::pair<B,A> flip_pair(const std::pair<A,B> &p){
    return std::pair<B,A>(p.second, p.first);}template<typename A, typename B>std::multimap<B,A> flip_map(const std::map<A,B> &src){
    std::multimap<B,A> dst;
    std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), 
                   flip_pair<A,B>);
    return dst;}int main(void){
    std::map<int, double> src;

    ...    

    std::multimap<double, int> dst = flip_map(src);
    // dst is now sorted by what used to be the value in src!}

通用關(guān)聯(lián)源(需要C ++ 11)

如果您正在使用std::map源關(guān)聯(lián)容器的替代(例如std::unordered_map),您可以編寫單獨(dú)的重載,但最后操作仍然是相同的,因此使用可變參數(shù)模板的通用關(guān)聯(lián)容器可用于任一映射構(gòu)造:

// flips an associative container of A,B pairs to B,A pairstemplate<typename A, typename B, template<class,class,class...> class M, class... Args>std::multimap<B,A> flip_map(const M<A,B,Args...> &src){
    std::multimap<B,A> dst;
    std::transform(src.begin(), src.end(),
                   std::inserter(dst, dst.begin()),
                   flip_pair<A,B>);
    return dst;}

這將適用于 翻轉(zhuǎn)std::mapstd::unordered_map翻轉(zhuǎn)的來源。


查看完整回答
反對(duì) 回復(fù) 2019-08-26
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

我需要類似的東西,但翻轉(zhuǎn)的地圖對(duì)我不起作用。我只是將我的地圖(下面的頻率)復(fù)制到一對(duì)矢量中,然后對(duì)我想要的對(duì)進(jìn)行排序。

std::vector<std::pair<int, int>> pairs;for (auto itr = freq.begin(); itr != freq.end(); ++itr)
    pairs.push_back(*itr);sort(pairs.begin(), pairs.end(), [=](std::pair<int, int>& a, std::pair<int, int>& b){
    return a.second < b.second;});


查看完整回答
反對(duì) 回復(fù) 2019-08-26
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

我喜歡Oli的答案(翻轉(zhuǎn)地圖),但似乎有問題:容器地圖不允許兩個(gè)元素具有相同的鍵。

解決方案是使dst成為類型multimap。另一個(gè)是將src轉(zhuǎn)儲(chǔ)到向量中并對(duì)向量進(jìn)行排序。前者需要對(duì)Oli的答案進(jìn)行微小的修改,而后者可以簡(jiǎn)潔地使用STL副本來實(shí)現(xiàn)

#include <iostream>#include <utility>#include <map>#include <vector>#include <algorithm>using namespace std;int main() {
  map<int, int> m;
  m[11] = 1;
  m[22] = 2;
  m[33] = 3;

  vector<pair<int, int> > v;
  copy(m.begin(),
       m.end(),
       back_inserter<vector<pair<int, int> > >(v));

  for (size_t i = 0; i < v.size(); ++i) {
    cout << v[i].first << " , " << v[i].second << "\n";
  }

  return 0;};


查看完整回答
反對(duì) 回復(fù) 2019-08-26
  • 3 回答
  • 0 關(guān)注
  • 2264 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)