2012-12-13 78 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