C++ 在遍历地图和打印内容时获取向后输出
当我通读下面发布的代码时,似乎打印的输出是:C++ 在遍历地图和打印内容时获取向后输出,c++,stl,iterator,maps,C++,Stl,Iterator,Maps,当我通读下面发布的代码时,似乎打印的输出是: Syndy James Phuong Germaine Agatha Anges Jack 然而,当我运行它时,我会首先打印Germaine和他的朋友向量,然后是Syndy和她的朋友向量: Germaine Agatha Anges Jack Syndy James Phuong 有人能帮我理解为什么在printFacebook函数中首先访问并打印第二个键Ger
Syndy
James
Phuong
Germaine
Agatha
Anges
Jack
然而,当我运行它时,我会首先打印Germaine和他的朋友向量,然后是Syndy和她的朋友向量:
Germaine
Agatha
Anges
Jack
Syndy
James
Phuong
有人能帮我理解为什么在printFacebook
函数中首先访问并打印第二个键Germaine而不是Syndy吗
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
void printFacebook(map<string, vector<string>>& m) {
for (pair<string, vector<string>> p : m) {
cout << p.first << endl;
for (string f : p.second) {
cout << "\t" << f << endl;
}
}
}
int main() {
map<string, vector<string>> facebook;
facebook["Syndy"].push_back("James");
facebook.find("Syndy")->second.push_back("Phuong");
//map<string, vector<string>>::iterator f = facebook.find("Syndy");
//auto f = facebook.find("Syndy");
facebook["Germaine"];
facebook.find("Germaine")->second.push_back("Agatha");
facebook.find("Germaine")->second.push_back("Anges");
facebook.find("Germaine")->second.push_back("Jack");
printFacebook(facebook);
}
#包括
#包括
#包括
#包括
使用名称空间std;
void printFacebook(地图与m){
用于(对p:m){
coutAstd::map
存储按键值排序的项目。在您的情况下,键是“Syndy”
和“Germaine”
。这些键的默认顺序是“Germaine”
是第一位的,“Syndy”
是第二位的
因此,当您迭代映射的项目时,与键“Germaine”
对应的项目出现在与键“Syndy”
对应的项目之前
这就解释了输出。那么std::map会自己排序吗?它如何确定键的顺序?@StacksAndParsing,是的。std::map
有一个用于比较键的可选参数。默认值是std::less
。有关详细信息,请参阅。