2013-12-15 55 views
0

我試圖打印出五個最常用的值。但是,當我將地圖更改爲多地圖時,我打破了向地圖添加值的代碼。我如何將值添加到多圖?它可以以類似的方式完成,因爲我將值添加到地圖中?將值添加到std :: multimap

// Create a map for keeping track of how many occurences of the different colors 
    multimap<string, int> hexmap; 

    // Add the hex values to the map 
     for(int i = 0; i < imagesize; i ++) 
     { 
      hexmap[colors[i]]++; 
     } 

     typedef std::multimap<int, string> Mymap; 
     Mymap dst; 

     std::transform(hexmap.begin(), hexmap.end(), 
        std::inserter(dst, dst.begin()), 
        [](const std::pair<string,int> &p) 
        { 
        return std::pair<int, string>(p.second, p.first); 
        } 
        ); 


     Mymap::iterator st = dst.begin(),it; 
     size_t count = 5; 
     for(it = st; (it != dst.end()) && (--count); ++it) 
     std::cout << it->second << it->first << endl; 
+1

您可能感興趣的Boost.Bimap。 –

+1

multimaps不支持通過operator []'進行訪問,所以您的'hexmap [colors [i]] ++'行無效。你有把'hexmap'變成多圖的原因嗎?它似乎可以保留爲常規地圖。 – Alec

+0

@alecbenzer是的,我想從hexmap recive五個最高值,並有不止一個具有相同的映射值。 – user2520739

回答

0

「我試圖列出五個最常用的值。」

在這種情況下,你不必使用hexmapstd::multimap只是std::map將使用做的工作

然而std::multimapdst應要求

+0

@POW我改變了它,我現在沒有得到一個錯誤,但它從最小值開始到最高值。如何改變數據的寫入方式? – user2520739

1

您元素添加到std::multimap<K, V>insert()emplace() ,例如:

std::multimap<std::string, int> map; 
map.insert(std::make_pair("hello" , 1)); 
map.insert({ "world", 0 }); 
map.emplace("hello", 0); 

你會找到對象在std::multimap<K, V>使用它的find()成員,例如:

std::multimap<std::string, int>::iterator it = map.find("hello");