打印一个map值,其中有两个字符串作为键,vector作为值

时间:2017-06-18 20:34:56

标签: c++ loops dictionary vector io

我有一个地图,其中有两个字符串作为键,一个矢量作为值 我该如何打印地图的价值。

以下是我的做法很糟糕有人可以提前帮助我

注意:我想按键打印而不是迭代矢量

int main()
{
        vector<string>value;
        std::map<std::pair<string,string> ,vector<string>> myMap;
        string input1,input2,MyvectorValue;
        for(int i=0;i<5;++i)
        {
                cin>>input1;
                cin>>input2;
                cin>>MyvectorValue;
                myMap[std::make_pair(input1,input2)].push_back(MyvectorValue);
        }
        int j=0;
        for( auto it = myMap.begin(); it != myMap.end(); ++it )
        {
                std::vector<std::string>& value = it->second.at(j++);
               cout<<value  // This is bad

           //how can i print all map value ??
        }
}

3 个答案:

答案 0 :(得分:2)

地图的值是一个向量,假设您可以使用C ++ 11,以下代码可以满足您的需求。

Array.Reverse

答案 1 :(得分:0)

您可以通过访问该对来打印密钥,然后使用firstsecond分别获取该对的第一个和第二个成员。

您还可以打印值,方法是访问矢量并迭代它们,分别打印每个字符串。

for(auto& element : myMap)
{
    std::cout << "Key: {" << element.first.first << ", " << element.first.second << "}\n";
    std::cout << "Value is a vector with the following strings: \n";
    for(auto& str: element.second)
        std::cout << str << std::endl;
}

答案 2 :(得分:0)

如果您想按键打印而不是迭代矢量,那么您可以将地图声明为&#34; std :: map,string&gt; MYMAP &#34 ;.然后,您可以对代码进行以下修改,如下所示。

int main() {
vector<string>value;
std::map<std::pair<string,string>,string> myMap;
string input1,input2,MyvectorValue;
for(int i=0; i<5; ++i) {

    cin>>input1;
    cin>>input2;
    cin>>MyvectorValue;
    myMap[std::make_pair(input1,input2)]+=MyvectorValue;
    myMap[std::make_pair(input1,input2)]+= " ";
}
for( auto it = myMap.begin(); it != myMap.end(); ++it ) {
    std::string& value = it->second;
    cout<<value<<endl;
  }
}