2016-03-23 3 views
1

Я дал вектор < вектор>, и я должен поместить их всоздать Multimap <строку, вектор <string>>

std::multimap< string, vector<string> > subsetsMap;

с первой строки каждого кортежа как ключ и вектор в качестве значения. Вот моя функция:

void hashThem() 
{ 
    int i,j; 
    vector<string> temp; 
    string first; 
    for(i=0;i<subset_list.size();i++) 
    { 
     for(j=0;j<subset_list[i].size();j++) 
      temp.push_back(subset_list[i][j]); 
     first = temp[0]; 
     subsetsMap.insert(pair<first,temp>); 
     temp.clear(); 
    } 
} 


subset_list и subsetsMap объявлены глобально. Декларация subset_list является:

vector< vector<string> > subset_list; 

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

dm1.cpp: In function ‘void hashThem()’: dm1.cpp:124:26: error: the value of ‘first’ is not usable in a constant expression
subsetsMap.insert(pair); ^dm1.cpp:118:10: note: ‘first’ was not declared ‘constexpr’ string first; ^dm1.cpp:124:32: error: the value of ‘temp’ is not usable in a constant expression subsetsMap.insert(pair); ^dm1.cpp:117:17: note: ‘temp’ was not declared ‘constexpr’ vector temp; ^dm1.cpp:124:36: error: type/value mismatch at argument 1 in template parameter list for ‘template struct std::pair’ subsetsMap.insert(pair); ^dm1.cpp:124:36: error: expected a type, got ‘first’ dm1.cpp:124:36: error: type/value mismatch at argument 2 in template parameter list for ‘template struct std::pair’ dm1.cpp:124:36: error: expected a type, got ‘temp’

Есть что-то не так, что я делаю, но так как я не знаю много C++ и не смог найти релевантный результат Google, любая помощь будет оценена. ТИА

ответ

3

subsetsMap.insert(pair<first,temp>); неправ.

Оно должно быть:

subsetsMap.insert(std::make_pair(first,temp)); 

Или:

subsetsMap.insert(std::pair<const std::string, std::vector<std::string>>(first,temp)); 

Обратите внимание на const для ключа.


Еще лучше:

subsetsMap.emplace(first,temp); // Forwarding the arguments directly to the constructor 
+0

2-я один (одна с Const работал). Остальные два (т. Е. Make_pair и emplace не работают). Спасибо .. – shane

+1

@Shane Мне бы очень хотелось увидеть этот день, когда люди перестали использовать такие расплывчатые (вы ** не можете ** получить более расплывчатые) заявления как _didn't work_ .. –

+0

@shane Добро пожаловать ... что ваш компилятор ? –

1

subsetsMap.insert(pair<first,temp>); должно быть:

subsetsMap.insert(make_pair(first,temp)); 

std::make_pair используется, чтобы сделать pair.

Смежные вопросы