草庐IT

affordance_map

全部标签

c++ - STL map中的后序遍历

我在gcccomper上使用STL映射,它使用树来存储键值对。迭代器以有序的方式前进,因此有序遍历非常容易。然而,我的输出要求之一是后序遍历。我被特别要求使用map。有什么办法可以做到吗? 最佳答案 没有标准的方法来访问std::map实例的“实际树结构”。此外,该标准不知道(或关心)map的元素在map可能使用的任何内部树中的确切排列方式。红黑树和AVL树都是std::map的有效实现,根据实际使用的情况,您会得到不同的后序遍历。在实践中,我希望它总是R-B或非常相似,但实现自由度通知了标准定义的接口(interface)。简而言

C++11 在 map<key, value> 中为值(int 和 string)存储多种数据类型的最简单方法?

我想要一个使用的map键字符串值的整数或字符串像这样:std::mapmyMap;myMap["first_key"]=10;myMap["second_key"]="stringValue";做这种事情的最简单方法是什么?已添加)我正在寻找适用于C++11的解决方案 最佳答案 在c++17中,你可以使用std::variant,在此之前,您可以使用boost中的那个:usingIntOrString=std::variant;std::mapmyMap;myMap["first_key"]=10;myMap["second_key

c++ - 在 C++0x 标准中会有 unordered_map,这与 boost unordered_map 相比如何?

哪个更有效率?有什么好的基准吗? 最佳答案 C++11的std::unordered_map规范类似于基于tr1::unordered_map的boost::unordered_map。话虽这么说,还是有一些细微的差别。在C++11中添加右值引用会导致添加可能对性能有用的emplace和emplace_hint函数。C++11现已得到广泛实现,因此您应该能够开箱即用地使用std::unordered_map。C++14不会对其进行重大更改,C++17将(可能)添加insert_or_assign和try_emplace成员函数。

c++ - std::map 是否允许在只读操作后重新平衡(如 Splay 树)

一些二叉树数据结构(例如Splay树)将在读取时重新平衡以将最近访问的项目移向根,这样可以减少后续查找时间。标准容器(std::map、std::set)是否允许这样做?至少一个问题是线程安全。以前,我认为只要您只对标准容器执行只读操作,从多线程执行此操作是安全的,而无需引入互斥锁/锁等。也许我需要重新考虑一下?我知道通常红黑树用于标准树容器,并且这些数据结构通常不会在读取时被修改。但是,确实修改过的假设实现是否符合要求?我的c++-standards-foo需要改进,但我不确定当前标准是否解决了容器的线程安全问题。这在c++0x中有什么不同吗? 最佳答案

Google-Map API给予无法加载资源:服务器以403()状态响应

目前,我正在使用AngularJS进行一个位置项目,其中我正在使用GoogleMapsJavaScriptAPI加载地图,并用于GoogleAutococterte服务。我从中下载了JShttp://maps.googleapis.com/maps/api/js并放置在项目JS文件夹中。我创建了指令,代码如下:.directive('callerLocation',function(){return{restrict:'E',replace:true,scope:{callerLocation:'='},template:'',link:function($scope,elm,attrs){v

c++ - 为什么 implicit == on map<<int,MyClass> 不编译?

我在为我的一个类(class)定义==时遇到了一个奇怪的问题。我将此处的代码简化为我在visual2013上测试过的示例;MyClass在命名空间N中定义这确实编译:N::MyClassa,b;booltest=a==b;这也是:constN::MyClassa,b;booltest=a==b;这不编译std::mapa,b;booltest=a==b;供您引用,=​​=运算符声明如下:booloperator==(constN::MyClass&a,constN::MyClass&b);这是我得到的错误:errorC2678:binary'==':nooperatorfoundwhi

c++ - 从 map<key, set<datatype>> 访问元素

我正在使用如下所示的数据结构:map>data;到目前为止,我在使用foreach循环处理map时没有遇到任何问题,但是,现在我需要像这样打印出map中的数据:KEY:elem1,elem2,elem3KEY2:elem1,elem2,elem3由于末尾缺少逗号,我不能再使用foreach循环了(可以吗?)。由于我是C++、C++11及其提供的所有乐趣的新手,所以我很迷茫。我想到了:for(autoi:data){cout我知道自己想要什么,只是对语法一无所知,C++引用也帮不上什么忙。感谢您的回答,同时我将自己浏览C++引用资料。 最佳答案

c++ - 从 initializer_list 错误构造 std::map

我正在尝试创建一个类构造函数,它将接受一个初始化列表并用它初始化一个映射,如下所示:classTest{std::mapm_ints;public:Test(std::initializer_list>init):m_ints(init){}};但这会导致很长的错误消息,坦率地说,我不明白。我需要更改什么才能使这项工作正常进行? 最佳答案 声明std::initializer_list的模板参数具有类型std::pair这是一个演示程序#include#include#includeclassTest{std::mapm_ints;

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

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

c++ - 放置在 unordered_map 中的项目是存储在堆栈还是堆中?

假设我有以下类(class):classMyOtherClass{std::unordered_map>_xy;voidputObject(intx,inty,MyClass*obj);voidcontainsXkey(intx){boolfound=false;std::unordered_map>::const_iteratorindex=_xy.find(x);if(index=_xy.end(){found=false;}else{found=true;}returnfound;}}假设我想编写一个函数将MyClass放置在坐标(2,3)处,那么我会这样做:voidputObj