2013-03-07 2 views
-1

Как напечатать вектор мультикадров? , например, у меня есть вектор, который выглядит следующим образом:Печать векторных карт

typedef std::multimap<double,std::string> resultMap; 
typedef std::vector<resultMap> vector_results; 

РЕДАКТИРОВАТЬ

for(vector_results::iterator i = vector_maps.begin(); i!= vector_maps.end(); i++) 
{ 
    for(vector_results::iterator j = i->first.begin(); j!= i->second.end(); j++) 
    { 
     std::cout << j->first << " " << j->second <<std::endl; 
    } 
} 
+1

По крайней мере, дать ему идти, чтобы мы что-то работать, где вы не можете исправить вашу конкретную проблему. –

+0

@EdHeal: Я действительно сделал. здесь есть попытка 'for (vector_results :: iterator i = vector_maps.begin(); i! = vector_maps.end(); i ++) { \t для (vector_results :: iterator j = i-> first.begin (); j! = i-> second.end(); j ++) { \t std :: cout << j-> first << " " << j-> second << std :: endl; \t } \t \t } ' –

+1

возможно дубликат [STL C++ контейнеров Довольно-печати] (http://stackoverflow.com/questions/4850473/pretty-print-c-stl-containers) – ildjarn

ответ

1

i переменную во внешних for точек цикла к resultMap, что означает, что тип переменной j должен быть resultMap::iterator. Переписать свои циклы, как

for(vector_results::const_iterator i = vector_maps.begin(); i != vector_maps.end(); ++i) 
{ 
    for(resultMap::const_iterator j = i->begin(); j != i->end(); ++j) 
    { 
     std::cout << j->first << " " << j->second << std::endl; 
    } 
} 

Я изменил тип итератора для const_iterator поскольку итераторы не изменяют элементы контейнера.


Если ваш компилятор поддерживает 11 C++ в диапазон на основе for петли, код может быть написан гораздо более сжато

for(auto const& i : vector_maps) { 
    for(auto const& j : i) { 
    std::cout << j.first << " " << j.second << std::endl; 
    } 
} 
Смежные вопросы