我用地图存储了一些键值,然后我需要按值对它们进行排序,我很想使用它:
#include <iostream>
#include <map>
#include <string>
int main ()
{
std::map<std::string, int> map1;
std::multimap<int, std::string> multimap2;
map1.insert ( std::pair<std::string, int>( "one", 4) );
map1.insert ( std::pair<std::string, int>( "two", 2) );
map1.insert ( std::pair<std::string, int>( "three", 2) );
map1.insert ( std::pair<std::string, int>( "four", 1) );
for (auto it = map1.begin(); it != map1.end(); ){
multimap2.insert(std::pair<int, std::string>( it->second, it->first));
map1.erase(it++);
}
for (auto it = multimap2.rbegin(); it != multimap2.rend(); ++it)
std::cout << it->first << " --- " << it->second << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给了我:
4 ---一个2 ---两个2 ---三个1 ---四个
因为我需要,但......有更聪明,更有效的方法来获得相同的结果吗?它必须使用足够大的数据集......
谢谢你的时间 :)
另一种方法是将它们转储到一个向量中,然后对它进行排序:
typedef std::pair<std::string, int> pair;
std::vector<pair> v;
v.reserve(map1.size());
std::copy(map1.begin(), map1.end(), std::back_inserter(v));
std::sort(v.begin(), v.end(),
[](pair const & a, pair const & b) {
return a.second < b.second;
});
Run Code Online (Sandbox Code Playgroud)
这可能比插入a更快multimap,因为它只需要一次内存分配.
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |