当我阅读下面发布的代码时,似乎打印的输出将是:
Syndy
James
Phuong
Germaine
Agatha
Anges
Jack
然而,当我跑步时,我得到Germaine和他的朋友矢量先打印,然后Syndy和她的朋友矢量第二:
Germaine
Agatha
Anges
Jack
Syndy
James
Phuong
任何人都可以帮助我理解为什么Germaine,第二个密钥,首先在printFacebook
函数而不是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);
}
答案 0 :(得分:1)
std::map
存储按键值排序的项目。在您的情况下,密钥为"Syndy"
和"Germaine"
。这些的默认顺序是"Germaine"
是第一个,"Syndy"
是第二个。
因此,当您迭代地图的项目时,在与"Germaine"
项对应的项目之前会看到与键"Syndy"
对应的项目。
这解释了输出。