Комплексные векторы в C ++ - PullRequest
0 голосов
/ 15 марта 2011

Я работаю с этим вектором: vector<string, vector<int>>.Я предположил, что первая итерация возвращает массив:

for (vector<string, vector<int>>::iterator it = sth.begin(); it != sth.end(); ++it) {
    // how do I get the string?
    // I tried (*it)[0], but that did not work
}

Кроме того, как бы я push_back к этому вектору?Прохождение vector<string, vector<int>()>() у меня не сработало.Спасибо

1 Ответ

5 голосов
/ 15 марта 2011

вектор занимает:

  • первый параметр шаблона имеет тип
  • второй необязательный параметр-распределитель

vector<int> не является допустимым распределителем для строки.

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

vector< pair<string, vector<int> > > outerVec;
vector<int> vecInt1, vecInt2;
vecInt1.push_back( 1 );
vecInt1.push_back( 5 );
vecInt2.push_back( 147 );
outerVec.push_back( std::make_pair( std::string("Hello World"), vecInt1 ) );
outerVec.push_back( std::make_pair( std::string("Goodbye Cruel World"), vecInt2 ));

Если мы введем определения вещей:

typedef std::vector<int> inner_vectype;
typedef std::pair< std::string, inner_vectype > pair_type;
typedef std::vector< std::pair > outer_vectype;

Теперь повторяем:

for( outer_vectype::const_iterator iter = outerVec.begin(), 
      iterEnd = outerVec.end();
     iter != iterEnd; ++iter )
{
    const pair_type & val = *iter;
    std::cout << val.first;
    for( inner_vectype::const_iterator inIter = val.second.begin(),
          inIterEnd = val.second.end(); inIter != inIterEnd; ++inIter )
    {
        std::cout << '\t' << *inIter;
    }
    std::cout << '\n';
}

Надеемся вывести что-то вроде:

Hello World    1    5
Goodbye Cruel World   147
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...