3

我想知道为什么std::map使用插入后不替换值。
例子:

using std::string;
using boost::flyweight;
using std::map;
int main() 
{ 
    map<string,flyweight<string>> testMap;

    flyweight<string> str("1");
    testMap.insert(std::make_pair("1","1"));
    testMap.insert(std::make_pair("1","2"));
    str = "2";
    printf("Inside map at \"1\" is:%s\r\n",testMap.at("1").get().c_str());
    printf("str equals %s",str.get().c_str());
}

将打印:

Inside map at "1" is: 1

str equals 2

仅用flyweight<string>作示例,使用ints 时也会发生同样的情况。

在 windows 操作系统上工作,visual 2010 ide。
谢谢,

4

1 回答 1

2

std::pair<iterator,bool> insert( const value_type& value );std::map

如果元素已经存在则不会插入

如果插入了新元素,则该对中pair::second的元素设置为 true,如果已存在等效键,则设置为 false。

你的问题与你无关boost

检查页面上的示例。它说明了您的情况。

于 2013-09-07T19:12:00.127 回答