use*_*911 7 c++ string int iterator
我有如下地图
string word;
int occurance;
std::map< std::string, std::map<string, int> > map;
map[word]["count"] = occurance;
Run Code Online (Sandbox Code Playgroud)
使用迭代器映射输出.
for(auto outer_iter=map.begin(); outer_iter!=map.end(); ++outer_iter) {
for(auto inner_iter=outer_iter->second.begin(); inner_iter!=outer_iter->second.end(); ++inner_iter) {
std::cout << outer_iter->first << '\t' << inner_iter->second << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过订购inner_iter-> second值来显示地图.
我该怎么做?
最简单的使用方法(除非分析表明不是这样)是在需要打印时简单地制作一个由内到外的地图:
std::multimap<int, std::string> inverse_map;
for(auto outer_iter=map.begin(); outer_iter!=map.end(); ++outer_iter)
{
for(auto inner_iter=outer_iter->second.begin(); inner_iter!=outer_iter->second.end(); ++inner_iter)
{
inverse_map.insert(std::make_pair(inner_iter->second, outer_iter->first));
}
}
Run Code Online (Sandbox Code Playgroud)
然后你只需循环倒置的地图并正常打印.
编辑:我认为你可以通过使用一set
对来获得你想要的双重排序:
std::set<std::pair<int, std::string> > inverse_map;
for(auto outer_iter=map.begin(); outer_iter!=map.end(); ++outer_iter)
{
for(auto inner_iter=outer_iter->second.begin(); inner_iter!=outer_iter->second.end(); ++inner_iter)
{
inverse_map.insert(std::make_pair(inner_iter->second, outer_iter->first));
}
}
Run Code Online (Sandbox Code Playgroud)