繁体   English   中英

在std :: map中排序,其中key是std :: string

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM