печать вектора на карте

У меня есть карта, определяемая:

map < char, vector < unsigned char>> dict;

После того, как функция сгенерирует и добавит содержимое в этот словарь, я хочу выполнить итерацию и распечатать каждую пару ключ: значение в цикле.

for(auto it = dict.begin(); it != dict.end(); ++it)
{
    cout << it.first << " : ";
    // how to output the vector here? since the len of value differs
    // for each key I need that size
    for( unsigned int s = it.size()
}

Как я могу получить размер значения от итератора, чтобы я мог выполнять итерацию по вектору для его вывода.


person gandolf    schedule 21.08.2013    source источник


Ответы (4)


it.second даст вам копию вектора для данного элемента карты, чтобы вы могли изменить свой внутренний цикл на

for(auto it2 = it->second.begin(); it2 != it->second.end(); ++it2)
    cout << *it2 << " ";
person simonc    schedule 21.08.2013
comment
Привет, спасибо, это сработало, хотя мне нужно было использовать оператор -› вместо . Но у меня есть другая проблема, кажется, что cout ‹‹ *it2 ‹‹ ; ничего не выводит, но использует printf(%i , *it2); делает..странно? - person gandolf; 21.08.2013

Я знаю, что этот вопрос немного устарел, но у меня был похожий вопрос, и этот пост помог мне, поэтому я думаю, что могу опубликовать свое решение здесь. На основе примера, найденного здесь: карта и мультикарта У меня есть map с парой <string, vector<string> >, где vector<string> будет, конечно, содержать более одного значения

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

using namespace std;

int main() {
   map< string, vector<string> > Employees;
   vector <string> myVec;
   string val1, val2, val3;
   val1 = "valor1";
   val2 = "valor2";
   val3 = "valor3";

   // Examples of assigning Map container contents
   // 1) Assignment using array index notation
   Employees["Mike C."] = {"val1","val2", "val3"};
   Employees["Charlie M."] = {"val1","val2", "val3"};

   // 2) Assignment using member function insert() and STL pair
   Employees.insert(std::pair<string,vector<string> >("David D.",{val1,val2,val3}));

   // 3) Assignment using member function insert() and "value_type()"
   Employees.insert(map<string,vector<string> >::value_type("John A.",{"val7","val8", "val9"}));

   // 4) Assignment using member function insert() and "make_pair()"
   myVec.push_back("val4");
   myVec.push_back(val1);
   myVec.push_back("val6");
   Employees.insert(std::make_pair("Peter Q.",myVec));

   cout << "Map size: " << Employees.size() << endl;

   for(map<string, vector<string> >::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii){
       cout << (*ii).first << ": ";
       vector <string> inVect = (*ii).second;
       for (unsigned j=0; j<inVect.size(); j++){
           cout << inVect[j] << " ";
       }
       cout << endl;
   }
}

Вы можете заметить различные способы добавления информации, а также часть печати, которая печатает пары «ключ-вектор», где вектор имеет несколько значений. Мы также можем печатать так, если C++11:

for(auto ii=Employees.begin(); ii!=Employees.end(); ++ii){
   cout << (*ii).first << ": ";
   vector <string> inVect = (*ii).second;
   for (unsigned j=0; j<inVect.size(); j++){
       cout << inVect[j] << " ";
   }
   cout << endl;
}

Вывод будет следующим:

Map size: 5
Charlie M.: val1 val2 val3 
David D.: valor1 aVal1 valor3 
John A.: val7 val8 val9 
Mike C.: val1 val2 val3 
Peter Q.: val4 valor1 val6 

P.S.: Я не знаю, почему вывод находится в другом порядке, я считаю, что разные методы нажатия и их скорость имеют к этому какое-то отношение.

person Lejuanjowski    schedule 20.04.2015

В С++ 11 вы можете сделать:

for(auto mapIt = begin(dict); mapIt != end(dict); ++mapIt)
{
    std::cout << mapIt->first << " : ";

    for(auto c : mapIt->second)
    {
        std::cout << c << " ";
    }

    std::cout << std::endl;
}

Обратите внимание на начало/конец, не являющийся членом. Кроме того, если вам не нужен сброс ostream, выкиньте, конечно, std::endl.

person thokra    schedule 21.08.2013

Для всех, кто все еще ищет это, это будет работать введите здесь описание изображения

person NimbusCloudy    schedule 09.04.2021
comment
Никогда не размещайте код в виде скриншота, пожалуйста. Всегда копируйте его и используйте функцию форматирования блока кода. - person Max; 10.04.2021