迭代地图并打印内容时返回输出

时间:2017-04-16 05:45:14

标签: c++ stl iterator maps

当我阅读下面发布的代码时,似乎打印的输出将是:

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);
}

1 个答案:

答案 0 :(得分:1)

std::map存储按键值排序的项目。在您的情况下,密钥为"Syndy""Germaine"。这些的默认顺序是"Germaine"是第一个,"Syndy"是第二个。

因此,当您迭代地图的项目时,在与"Germaine"项对应的项目之前会看到与键"Syndy"对应的项目。

这解释了输出。