[英]sorting in std::map where key is a std::string
我有一个std :: map mymap
现在,如果我在地图中插入值,如:
std::map <string, string> mymap;
mymap["first"] = "hi";
mymap["third"] = "how r you";
mymap["second"] = "hello";
现在我想迭代地图并以排序(键)方式打印值:
map<string, string>::iterator itr;
for(itr = mymap.begin(); itr != mymap.end(); itr++)
{
string newline = itr->second;
cout << newline << endl;
}
输出应该是:
hi
hello
how r you
我认为默认情况下,地图存储按排序键方式存储,但我在输出中得到的输入与输入相同。 我需要为此提供我的排序功能,还是需要在迭代地图之前做一些额外的事情?
std::map
中的元素是由operator<
应用于键的(默认情况下)排序的。
您发布的代码经过了少量修改后,按照您的预期为我工作:
std::map <string, string> mymap;
mymap["first"]="hi";
mymap["third"]="how r you";
mymap["second"]="hello";
for (std::map<string, string>::iterator i = mymap.begin(); i != mymap.end(); i++)
{
cout << i->second << "\n";
}
打印:
hi
hello
how r you
map
实际上是一棵树 ,按KEY顺序排序。 您正在打印itr->second
,这是VALUE而不是KEY。 如果您希望键值/值对按VALUE排序,请使用VALUE作为键,或将所有内容存储在另一个容器(例如数组)中,然后对它们进行排序。
std :: map已经订购了。 如果您使用的是unordered_map,那么现在您遇到了问题!
std :: map中的条目按键排序,或者首先是itr->。 itr->第二,因为你有它,指的是与键相关的值。
更进一步,你没有迭代地图,你正在迭代file_line(我不知道那是什么,但我会假设它与mymap不同。这就是你应该迭代的东西)。
标准定义:
关联容器的迭代器的基本属性是它们以密钥的非降序顺序遍历容器,其中非降序由用于构造它们的比较定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.