2016-05-30 48 views
-2

如何访问int参数的map和passed_vector函数中的字符串向量。 我只是想在那个函数中打印它们。如何访问(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

最简单的形式给出是使用auto,也因为你的meetings是常量,你需要使用const_iterator

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