2012-12-13 119 views
0

根據http://www.cplusplus.com/reference/vector/vector/operator=/我明白我們可以使用'='運算符來分配向量。但運行下面的代碼,我得到一個錯誤。出了什麼問題?C++:向量賦值錯誤

代碼:

void checkFunction(map<string, vector<string> > foo){ 
    vector<string> bar;  
    bar = foo.find("ABC"); 
    } 

錯誤:

error: no match for ‘operator=’ in ‘bar = foo.std::map<_Key, _Tp, _Compare, _Alloc>::find [with _Key = std::basic_string<char>, _Tp = std::vector<std::basic_string<char> >, _Compare = std::less<std::basic_string<char> >, _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::vector<std::basic_string<char> > > >, std::map<_Key, _Tp, _Compare, _Alloc>::iterator = std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, std::vector<std::basic_string<char> > > >, key_type = std::basic_string<char>](((const std::map<std::basic_string<char>, std::vector<std::basic_string<char> > >::key_type&)(& std::basic_string<char>(((const char*)"PAR"), ((const std::allocator<char>&)((const std::allocator<char>*)(& std::allocator<char>())))))))’ 

std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = std::basic_string<char>, _Alloc = std::allocator<std::basic_string<char> >] 
std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::vector<_Tp, _Alloc>&&) [with _Tp = std::basic_string<char>, _Alloc = std::allocator<std::basic_string<char> >, std::vector<_Tp, _Alloc> = std::vector<std::basic_string<char> >] 
std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::initializer_list<_CharT>) [with _Tp = std::basic_string<char>, _Alloc = std::allocator<std::basic_string<char> >, std::vector<_Tp, _Alloc> = std::vector<std::basic_string<char> >] 
+0

* vectors *你可以指定! –

+0

@LotharKrause:是的,但爲什麼會出現這種錯誤呢? – Enigman

+0

因爲'map :: find'給你一個迭代器,它被取消引用,根據http://www.cplusplus.com/reference/map/map/find/ –

回答

4

map::find方法返回在您搜索元件指向的迭代器(存儲在std::pair包含密鑰作爲first和值爲second)。

要訪問迭代器指向的向量,需要對其進行取消引用並獲取對的second元素。

void checkFunction(map<string, vector<string> > foo){ 
    typedef map<string, vector<string> > map_t; 

    map_t::const_iterator i = foo.find("ABC"); 
    if (i == foo.end()) { 
     // element not found! 
    } 

    vector<string> bar(i->second); 
} 
+0

嘿,謝謝你的回答。它仍然不起作用!?再次獲得類似的錯誤。 – Enigman

+2

operator []返回向量的引用,所以這將工作: bar = foo [「ABC」]; – Peter

+0

@mkaes,修好了! – SirDarius