当我阅读下面发布的代码时,似乎输出的输出为:

Syndy
    James
    Phuong
Germaine
    Agatha
    Anges
    Jack

但是,当我运行它时,我首先打印出Germaine和他的 friend vector ,然后是第二张Syndy和她的 friend vector :
Germaine
    Agatha
    Anges
    Jack
 Syndy
    James
    Phuong

谁能帮助我理解为什么第二个关键字Germaine而不是Syndy会首先在printFacebook函数中访问和打印?
#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::map存储按键值排序的项。在您的情况下,键是"Syndy""Germaine"。这些的默认顺序是"Germaine"为第一,而"Syndy"为第二。

因此,当您遍历 map 项时,与键"Germaine"对应的项会在与键"Syndy"对应的项之前被看到。

那解释了输出。

关于c++ - 遍历 map 和打印内容时向后输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43434134/

10-10 16:24