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){

coutA
std::map
存储按键值排序的项目。在您的情况下,键是
“Syndy”
“Germaine”
。这些键的默认顺序是
“Germaine”
是第一位的,
“Syndy”
是第二位的

因此,当您迭代映射的项目时,与键
“Germaine”
对应的项目出现在与键
“Syndy”
对应的项目之前


这就解释了输出。

那么std::map会自己排序吗?它如何确定键的顺序?@StacksAndParsing,是的。
std::map
有一个用于比较键的可选参数。默认值是
std::less
。有关详细信息,请参阅。