2017-06-18 9 views
0

2つの文字列をキーとし、1つのベクトルを値として マップの値をどのように印刷できますか?以下は2つの文字列をキーとし、値としてベクトルを持つマップの値を出力する

は、誰かが私に事前

NOTEで感謝を助けることができるの悪いである私のアプローチです:私は、あなたがアクセスして、キーを印刷することができ、ベクターに

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 ?? 

      } 

    } 
+0

なぜベクトルを反復して各値を印刷しないのですか? –

+0

あなたはベクトルを反復したくないと言っていますが、そうでない場合はどのように値を取得すると思いますか?おそらく不可能なユースケースについて、より具体的に説明する必要があります。 –

答えて

2

マップの値はベクトルです.C++ 11を使用できると仮定すると、次のコードは必要な処理を行います。あなたは鍵がベクトルに反復しないことで、印刷したい場合は

#include <string> 
#include <iostream> 
#include <map> 
#include <utility> 
#include <vector> 

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

     std::cin>>input1; 
     std::cin>>input2; 
     std::cin>>MyvectorValue; 
     myMap[std::make_pair(input1,input2)].push_back(MyvectorValue); 
    } 

    //If you have a particular key (string1, string2), and want to print the values for that specific key... 
    auto particularKey = std::make_pair("stringA", "stringB"); 
    for(auto val : myMap[particularKey]) 
     std::cout << val << " "; 
    std::cout << std::endl; 

    // If you want to iterate through all keys of your map 
    for(auto &elem : myMap) 
    { 
     std::cout << "for the pair with key (" << elem.first.first << "," << elem.first.second << "), the value is the following vector" << std::endl; 
     for(auto s : elem.second) 
     { 
      std::cout << s << " "; 
     } 
     std::cout << std::endl << std::endl; 
    } 
    return 0; 
} 
+0

私はいくつかのユースケースを持っているので、私はどのようにベクトルで反復ではなくキーを使用して印刷することができますか? –

+0

マップの値は文字列のベクトルです。文字列を1つずつ出力するには、必ず文字列のベクトルを反復処理する必要があります。 –

+0

特定のキーに印刷したいと思うようです。 – pravakar

0

を反復しませキーで印刷したいですペアを作成し、firstsecondを使用して、それぞれペアの第1メンバーと第2メンバーを取得します。

ベクトルにアクセスして反復処理を行い、すべての文字列を別々に印刷することで、値を印刷することもできます。

+0

私はベクトル上で反復しないキーで印刷したい私の質問をアップアップ –

+0

@ user7953556私は自分の答えを更新しました、それはあなたが欲しいものですか? – gsamaras

0

、あなたは「のstd ::マップ、文字列> MYMAP」としてマップを宣言してもよいです。次に、以下のようにコードを次のように変更することができます。

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; 
    } 
} 
+0

あなたは1つの文字列を使用しましたが、私の質問はベクトルとして値 –

+0

でした。申し訳ありませんが、ベクターを印刷する場合は、おそらくそれ以外の方法はないと思います。 –

+0

あなたは参照用に上記の受け入れ可能な値をチェックすることができます –

関連する問題