草庐IT

auto_mapping

全部标签

c++ - 在 std::auto_ptr 的构造函数中使用 `explicit` 关键字有什么原因吗?

这是用于在VS2008编译器中从标准指针构造std::auto_ptr对象的构造函数。templateclassauto_ptr{public:explicitauto_ptr(_Ty*_Ptr=0)_THROW0():_Myptr(_Ptr){}private:_Ty*_Myptr;};explicit是否有任何特殊原因?上面使用关键字?换句话说,为什么我不能初始化auto_ptr与std::auto_ptrptr=newClassA;? 最佳答案 因为否则您可能会无意中执行以下操作:voidfoo(std::auto_ptrp)

c++ - 如何将所有对从一个 std::map 移动到另一个

假设我有以下内容:std::mapm1;std::mapm2;从m1移动所有键/值对的最直接方法是什么?进入m2?我希望:m1在此操作后为空m2最初可能有对m2中与m1不具有相同key的那些对应该单独保留m2中与m1具有相同key的那些对应该被m1的对覆盖我需要来自的调用组合吗??解决方案JamesKranze的解决方案满足我的要求。for(constauto&p:m1)m2[p.first]=p.second;m1.clear();JoachimPileborg的建议仅在m2和m1没有相同的键时才有效(即m2的值不会被m1的相同键的值覆盖)std::move(m1.begin(),m

c++ - C++中的map数据结构是什么

这个问题在这里已经有了答案:Whatdatastructureisinsidestd::mapinC++?(6个答案)关闭7年前。在C++中,以下代码行使用的数据结构是什么?mapdict;它是哈希表吗?

c++ - 在多线程环境中使用 auto_ptr 交换对象而不锁定是安全的吗?

我在堆上分配了一些数据结构,它们很少被修改但需要快速读取访问。一个例子是在堆上分配的结构,许多线程以只读方式非常频繁地访问它。需要定期重写此结构并避免锁定争用我想知道使用auto_ptr是否安全基本上允许已获取引用的线程继续处理直到它们完成writer创建结构的拷贝,重写它并快速与结构的新auto_ptr实例交换指针。我从Java中的CopyOnWriteArrayList得到这个想法,并希望在C++中执行类似的性能。 最佳答案 std::auto_ptr在调用非常量成员(例如reset())时没有任何线程安全保证正如你所建议的。此

字符串和成员函数指针的C++ Map

嘿,所以我正在制作一个以字符串为键、成员函数指针为值的映射。我似乎无法弄清楚如何添加到map,这似乎不起作用。#include#includeusingnamespacestd;typedefstring(Test::*myFunc)(string);typedefmapMyMap;classTest{private:MyMapmyMap;public:Test(void);stringTestFunc(stringinput);};#include"Test.h"Test::Test(void){myMap.insert("test",&TestFunc);myMap["test"]

c++ - std::map 是否支持缓存?

例如:代码1:if((iter=map.find(key))!=map.end()){returniter->second;}return0;代码2:if(map.count(key)>0){returnmap.at(key);}return0;code2更简单,但map.count()和map.at()都花费O(logn)时间。std::map是否提供将最后一个搜索项存储在缓存中并加快搜索相同项的功能,或者它只是在整个map中执行第二次搜索? 最佳答案 它在整个map中进行搜索,没有进行缓存-或者至少,标准没有强制执行任何操作,我

c++ - 如何将 const 字符串值放入 map

我想创建一个map,std::mapm_mapResponseDesc;我正在使用operator[]在map中附加一个值:m_mapResponseDesc[STATUS_LIMIT]="Limithasbeenexceeded";STATUS_LIMIT类型为enum.我遇到错误:errorC2678:binary'=':nooperatorfoundwhichtakesaleft-handoperandoftype'conststd::basic_string'(orthereisnoacceptableconversion)请指出我做错了什么。我没有得到任何线索。

c++ - 正确使用 std::map 作为类成员

过去我总是创建这样的map:classTestClass{private:std::map*mapA;};TestClass::TestClass{mapA=newstd::map();}TestClass::~TestClass{mapA->clear();//notnecessarydeletemapA;}所以,现在我在Stackoverflow上到处阅读:尽可能避免指针目前我想创建没有指针和new的映射(不需要自己删除对象,并且内存泄漏的危险较小)!classTestClass{public:TestClass():mapA()//thisisalsoneeded?{};priv

c++ - STL priority_queue<pair> 与 map

我需要一个优先级队列来存储每个键的值,而不仅仅是键。我认为可行的选择是std::multi_map因为它按键顺序迭代,或std::priority_queue>因为它在V之前在K上排序。除了个人偏好之外,我有什么理由更喜欢另一个吗?它们真的一样吗,还是我漏掉了什么? 最佳答案 优先级队列最初是在O(N)时间内排序的,然后以降序迭代所有元素需要O(NlogN)时间。它存储在std::vector中在幕后,所以在大O行为之后只有很小的系数。不过,其中一部分是在vector内部移动元素。如果sizeof(K)或sizeof(V)很大,会慢

c++ - 小 N 的 std::map 与 unordered_map 内存占用

对于内存使用比速度更重要的嵌入式系统应用程序,最好使用什么map容器?std::map,std::unordered_map?这适用于N小于一百的情况。如果实现很重要,那么我会关注libstdc++实现(GCC)。虽然我知道在内存使用方面不可能超过简单的数组,但我想避免使用具有O(N)性能的数据结构。因此,虽然我想减少内存占用,但我也希望查找速度合理(优于O(N))。我不关心其他操作(插入、删除),因为它们很少发生。如果我想自己测量内存使用情况,我应该如何在Linux平台上进行测量?会boost::flat_map适合作为占用空间小且查找时间优于O(n)的关联容器吗?