问题编译stl map插入

时间:2011-03-30 08:39:13

标签: c++ linux gcc stl

我在编译以下代码时遇到问题:

typedef std::map<mUUID, block_ptr_t> BlockMap;
BlockMap _store;

std::pair< BlockMap::iterator, bool > it;
it = _store.insert(hint, std::make_pair(entry.block_uid, block));

错误是:

error: no match for ‘operator=’ in ‘it = BlockStore::_store.std::map<_Key, _Tp, _Compare, _Alloc>::insert [with _Key = mUUID, _Tp = Block*, _Compare = std::less<mUUID>, _Alloc = std::allocator<std::pair<const mUUID, Block*> >](lb, ((const std::pair<const mUUID, Block*>&)(& std::pair<const mUUID, Block*>(((const std::pair<mUUID, Block*>&)((const std::pair<mUUID, Block*>*)(& std::make_pair(_T1, _T2) [with _T1 = mUUID, _T2 = Block*](block))))))))’
/usr/include/c++/4.4/bits/stl_pair.h:68: note: candidates are: std::pair<std::_Rb_tree_iterator<std::pair<const mUUID, Block*> >, bool>& std::pair<std::_Rb_tree_iterator<std::pair<const mUUID, Block*> >, bool>::operator=(const std::pair<std::_Rb_tree_iterator<std::pair<const mUUID, Block*> >, bool>&)

它似乎与赋值相关,因为如果我不将它赋给“it”,它就会编译而没有错误。

2 个答案:

答案 0 :(得分:1)

获取提示的insert版本仅返回迭代器,而不是一对。

答案 1 :(得分:0)

首先,您的示例不完整 - 无法定义_store。

其次,你似乎试图将一个迭代器分配给一个std ::对 - 为什么你还需要一对呢?

如果_store的类型为BlockMap,则以下内容应该有效:
BlockMap::iterator it;
it = _store.insert(std::make_pair(entry.block_uid, block));