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

Ruc*_*chi 17 c++ stl

我有一个std :: map mymap

现在,如果我在地图中插入值,如:

std::map <string, string> mymap;
mymap["first"] = "hi";
mymap["third"] = "how r you";
mymap["second"] = "hello";
Run Code Online (Sandbox Code Playgroud)

现在我想迭代地图并以排序(键)方式打印值:

map<string, string>::iterator itr;
for(itr = mymap.begin(); itr != mymap.end(); itr++)
{
   string newline = itr->second;
   cout << newline << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出应该是:

hi 
hello 
how r you 
Run Code Online (Sandbox Code Playgroud)

我认为默认情况下,地图存储按排序键方式存储,但我在输出中得到的输入与输入相同.我需要为此提供我的排序功能,还是需要在迭代地图之前做一些额外的事情?

hmj*_*mjd 26

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";
}
Run Code Online (Sandbox Code Playgroud)

打印:

hi
hello
how r you
Run Code Online (Sandbox Code Playgroud)

  • `auto`?这个问题没有被标记为[tag:C++ 11] (2认同)

Gio*_*hal 5

map实际上是一个,并得到了主要的顺序进行排序。您正在打印的itr->second是值而不是键。如果要按VALUE对键/值对进行排序,请改用VALUE作为键,或将所有内容存储在另一个容器(例如数组)中,然后对其进行排序。