jjzjj

c++ - 这是正确的行为吗? std::map 迭代器失效

#include#includeintmain(intargc,char**argv){std::mapmap;map.emplace(1,1);autoreverse_iter=map.rbegin();std::coutfirstsecondfirstsecond打印出来:1,12,2根据标准,这真的应该发生吗?我没有接触reverse_iter但它指向的值正在改变。我认为std::map中的迭代器应该可以安全地防止插入。然而,它似乎决定reverse_iter不再指向我告诉它的值,而是指向“此时map末尾发生的任何事情”。更新:更多信息,以防万一:前向迭代器似乎不会发生这种情况(

c++ - 使用 C 类型 uuid_t 作为 std::map 中的键的最佳方法是什么?

这是在map中提供唯一键的适当方式吗?换句话说,key是由uuid中包含的唯一值生成的,还是由指向uuid_t结构的指针生成的?一个附带的问题,当我不关心容器内按键的排序时,是否有更高效的容器?#includeintmain(intargc,char**argv){std::mapmyMap;uuid_tid1;uuid_tid2;uuid_generate((unsignedchar*)&id1);uuid_generate((unsignedchar*)&id2);myMap[id1]=5;myMap[id2]=4;} 最佳答案

c++ - 为什么 map.erase 返回迭代器?

我想删除std::map从beginIt到endIt的元素。erase函数将迭代器返回到最后一个删除元素之后的元素。不是结束了吗?为什么删除返回迭代器?autoit=m_map.erase(beginIt,endIt); 最佳答案 这是C++标准库为其所有容器采用的一个有用的特性。一个特别好的用途是当您删除一组受约束的元素并且迭代整个容器时。显然,从容器中删除某些内容会使您传递的迭代器无效。返回下一个候选迭代器很有用。 关于c++-为什么map.erase返回迭代器?,我们在StackO

c++ - 为什么 std::map 有一个 find 成员函数?

我和一位同事正在讨论成员职能与非成员职能的相对优点。一个问题出现了:为什么std::map有一个find成员函数。我的回答是,虽然您可以在map上使用std::find,但您必须搜索键值对,或者使用find_if和例如一个lambda。然而,这是线性的,map.find提供了比线性时间更好的按键搜索。我最后断言,如果它可能是非成员(member),那么它本来就是!(尽管std::string表明我的概括可能有些草率)。我的同事指出,可以使用map.lower_bound以与非成员函数相同的方式实现find。map.find成为成员(member)是否有理由?

c++ std将列表复制到 map

考虑以下几点:structA{inti;doubled;std::strings;};std::listlist_A;我想将list_A的所有元素复制到map中,这样map中的每一对都将包含list_A中的一个元素作为值,其字符串s作为键。有没有比遍历列表并将每个元素及其字符串作为键插入映射更优雅的方法? 最佳答案 我喜欢标准库算法和lambda,但它并没有比以下更简单:for(constA&value:list_A){map_A.insert(std::make_pair(value.s,value));}其他方法正在执行与此代码

c++ - 如何设置一个以字符串为键、以 ostream 为值的映射?

我正在尝试使用mapC++中的容器,如下所示:key是string值是类型为ofstream的对象.我的代码如下所示:#include#include#include#includeusingnamespacestd;intmain(){//typedefmapmapType2;//mapfoo;typedefmapmapType;mapfooMap;ofstreamfoo1;ofstreamfoo2;fooMap["file1"]=foo1;fooMap["file2"]=foo2;mapType::iteratoriter=fooMap.begin();coutfirst;}但是,

c++ - 我可以在从另一个线程插入/删除时访问 C++11 std::map 条目吗?

我可以在另一个线程插入/删除条目时访问(不锁定)std::map条目吗?示例伪C++:typedefstruct{intvalue;intstuff;}some_type_t;std::mapmy_map;//thread1does:my_map.at('a')->value=1;//thread2does:some_type_t*stuff=my_map.at('b');//thread3does:my_map.erase('c');//I'mnotmodifyinganyelementsTisapointertoanpreviouslyallocated"some_type_t"s

C++,通过 const 引用访问 std::map 元素

我对const有疑问。说我有:classA{friendstd::ostream&operatorsomeMap;intsomeInteger;};std::ostream&operator由于与map的const冲突,这种代码在编译时会产生错误(如果我注释掉打印map值的那一行就没问题),如果我去掉函数原型(prototype)中的“const”很好。我真的看不出问题在哪里..有什么帮助吗? 最佳答案 std::map::operator[]不是const,因为如果元素不存在,它会插入一个元素。在C++11中,你可以使用std::

c++ - 为什么 map<bool,int> m={{1,2},{3,4},{5,0}};尺寸 1 而不是 3?

很奇特:mapmb={{1,2},{3,4},{5,0}};coutmi={{1,2},{3,4},{5,0}};cout打印出来13 最佳答案 std::map是唯一键。1,3,5所有产量true转换为bool时. 关于c++-为什么mapm={{1,2},{3,4},{5,0}};尺寸1而不是3?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/28596881/

c++ - 如何在 C++ 类函数中将 std::map 作为默认构造函数参数传递

尝试在Ubuntu12.04上的clang-3.3和clang-3.0中使用std::map时遇到问题:#include#include#includeclassA{public:#if0//clangcompilesoktypedefstd::mapMapKeyValue_t;voidPrintMap(constMapKeyValue_t&my_map=MapKeyValue_t())#else//clangcompilesfailvoidPrintMap(conststd::map&my_map=std::map())#endif{std::map::const_iteratori