2016-05-30 15 views
-2

私は、渡されたベクトル関数でintのマップとstringのベクトルにアクセスする方法を教えてください。 私はその機能でそれらを印刷したいだけです。(intとベクトルの文字列のベクトル)のベクトルにアクセスする方法

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

using namespace std; 
typedef vector< map< int, vector<string> > > vmis; 
typedef map< int, vector<string> > mis; 
typedef vector<string> vstr; 

void passing_vector(const vmis &meetings); 

//return size of vector 

template< typename A > size_t n_elements(const A& a) 
{ 
    return sizeof a/sizeof a[ 0 ]; 
} 

int main() 
{ 
    vmis meeting_info; 
    mis meeting_members; 
    vstr sw_vec; 
    vstr sys_vec; 
    string sw_team[] = {"Ricky", "John", "David"}; 
    string sys_team[] = {"Simmon", "Brad", "Schmidt", "Fizio"}; 

    sw_vec.insert(sw_vec.begin(), sw_team, sw_team + n_elements(sw_team)); 
    sys_vec.insert(sys_vec.begin(), sys_team, sys_team + n_elements(sys_team)); 

    meeting_members.insert(make_pair(520, sw_vec)); 
    meeting_members.insert(make_pair(440, sys_vec)); 

    meeting_info.push_back(meeting_members); 

    passing_vector(meeting_info); 

    return 0; 
} 

void passing_vector(const vmis &meetings) 
{ 
    vmis::iterator itvmis = meetings.begin(); 

    //how do i access map of int and vectors of string. 
    //I just want to print them. 


} 

私は主な機能でそれらを印刷する方法を知っています。

vmis::iterator itvims = meeting_info.begin(); 

for(int i = 0; i < meeting_info.size(); i++) 
{ 
    mis::iterator itm = meeting_members.begin(); 
    for(itm; itm != meeting_members.end(); itm++) 
    { 
     cout << itm->first << " : "; 
     vstr::iterator it = itm->second.begin(); 

     for(it; it != itm->second.end(); it++) 
      cout << *it << " "; 

     cout << endl; 
    } 
} 

所望の出力 440:サイモンブラッド・シュミットFizio 520:リッキージョン・デビッド

この提案は常に歓迎されていることのより良い方法があるかどうか。

+0

C++ 11の機能を使用できますか( 'for(const auto&meeting:meeting_info)')? – kfsone

+0

私はそれを使用しませんでした。これは私がSTLを使用している最初のので、私はそれについて知識がありません。 – bluelight

答えて

1

最も簡単aproachはまたあなたmeetingsがconstのであるから、あなたはconst_iteratorを使用する必要がある、autoを使用することです:

void passing_vector(const vmis &meetings) 
{ 
    vmis::const_iterator itvims = meetings.begin(); 

    //how do i access map of int and vectors of string. 
    //I just want to print them. 
    for (;itvims != meetings.end(); ++itvims) 
    { 
    const auto& map_item = *itvims; 
    for (const auto& map_it : map_item) 
    { 
     int map_key = map_it.first; 
     const auto& str_vec = map_it.second; 
     for (const auto& str : str_vec) 
     { 
     std::cout << map_key << " - " << str << "\n"; 
     } 
    } 
    } 

} 

[編集]

C++ 98バージョン:

void passing_vector(const vmis &meetings) 
{ 
    vmis::const_iterator itvims = meetings.begin(); 

    //how do i access map of int and vectors of string. 
    //I just want to print them. 
    for (;itvims != meetings.end(); ++itvims) 
    { 
    const mis& map_item = *itvims; 
    for (mis::const_iterator map_it = map_item.begin(); map_it != map_item.end(); ++map_it) 
    { 
     int map_key = map_it->first; 
     const vstr& str_vec = map_it->second; 
     for (vstr::const_iterator sitr = str_vec.begin(); sitr != str_vec.end(); ++sitr) 
     { 
     std::cout << map_key << " - " << *sitr << "\n"; 
     } 
    } 
    } 
} 
+0

これは機能しています。 STLを学ぶための良い本をお勧めしますか – bluelight

+0

@bluelight私は初心者のためのSTLの本しか知らないので、ここで良い本を見つけることができます:http://stackoverflow.com/questions/388242/the-definitive-c-book-ガイドとリスト。私の答えが役に立ったら、それを受け入れることを検討してください。 – marcinj

+0

上記の解決策は動作していますが、私の職場ではC++ 98を使用しています。したがって、C++ 98で代替方法がありますか? – bluelight

関連する問題