2015-03-17 1 views
1

У меня есть следующие две переменные:Нет соответствия функции члена в карте вставьте

static vector<map<uint32_t,vector<uint64_t>>> relations; 
static map<uint64_t,map<uint32_t,vector<uint64_t>>> transactions; 

uint64_t key1; 
uint32_t key2; 
uint32_t key3; 
// init keys... 

и я пытаюсь скопировать один vector из relations в transactions:

transactions[key1][key2].push_back(relations[key2][key3])); 

Но я нахожу эту ошибку:

main.cpp:175:26: error: no matching member function for call to 'push_back' 
    transactions[key1][key2].push_back(relations[key2][key3])); 
    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/vector:700:36: note: candidate function not viable: no 
    known conversion from 'vector<uint64_t>' to 'const value_type' (aka 'const unsigned long long') for 1st argument 
_LIBCPP_INLINE_VISIBILITY void push_back(const_reference __x); 
          ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/vector:702:36: note: candidate function not viable: no 
    known conversion from 'vector<uint64_t>' to 'value_type' (aka 'unsigned long long') for 1st argument 
_LIBCPP_INLINE_VISIBILITY void push_back(value_type&& __x); 

Любая идея о том, что происходит?

ответ

6

relations[key2][key3] является vector<uint64_t>, и вы пытаетесь добавить его в transactions[key1][key2], который является vector<uint64_t>.

Вы не можете добавить vector<uint64_t> в номер vector<uint64_t>.


Если вы хотите добавить содержимого первого vector ко второму, вам нужно использовать std::vector::insert:

auto& dst = transactions[key1][key2]; 
const auto& src = relations[key2][key3]; 
dst.insert(dst.end(), src.begin(), src.end()); 
Смежные вопросы