在std::map中排序,其中key是std::字符串

sorting in std::map where key is a std::string

本文关键字:std key 字符串 其中 排序 map      更新时间:2023-10-16

我有一个std::map mymap

现在,如果我在映射中插入值:

std::map <string, string> mymap;
mymap["first"] = "hi";
mymap["third"] = "how r you";
mymap["second"] = "hello";

现在我想遍历映射并以sorted(keys)方式打印值:

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 ->second表示与键相关联的值。

更进一步,你不是在map上迭代,你是在file_line上迭代(我不知道那是什么,但我假设它不同于mymap。

标准定义:

关联容器的迭代器的基本属性是遍历容器在键的非降序中,其中非降序是由使用的比较定义的构造。