jjzjj

c++ - STL 允许使用指向不同 map 的迭代器删除 map 的键/值吗?

所以,我偶然发现的是:std::mapmap1;std::mapmap2;map1[2.5]=11;map1[3.5]=12;map2[2.5]=21;map2[3.5]=22;std::map::iteratoriterMap1=map1.find(2.5);//Iwillnowtrytoeraseakey/valuepairinmap2withaniterator//thatpointstomap1.Thisisbad/wrong.ButIamsurprised//thisisallowed.map2.erase(iterMap1);//whatdoyouthinkwouldbep

c++ - 接收通用 map 作为参数的模板函数

在很多情况下,我们希望对完全相同的std::map或std::unordered_map执行一些操作,独立于map的类型。让我们考虑以下示例:#include#include#includetemplateclassContainer>voidprintMap(ContainerinputMap,booladditionalParam=false){for(constpairp:inputMap)coutmap1;map1.emplace(a,b);unordered_mapmap2;map2.emplace(a,b);printMap(map1);printMap(map2);ret

c++ - 删除 std::map (Visual C++)

我有一个指向我试图删除的map的指针(这个map是用新分配的)。我认为这张map是有效的,当我在调试时将鼠标悬停在它上面时,它显示pMap:[0]()..当我尝试删除这个空map时,我的应用程序就退出了,我得到一个First-chanceexceptionat0xsomelocationinmyapp.exe:0xsomenumber:Theobjectinvokedhasdisconnectedfromitsclients.在输出窗口中。这是什么意思?谢谢..编辑:这是一些示例代码:typedefmapmyMap;typedefvectormyMapStack;StructB有一个重

c++ - 通过 emplace() 将对象指针插入到 map 的 map 中不起作用

我正在尝试将指针对象插入到map通过emplace()但它不起作用。我在下面创建了一个简单的问题表示。我正在尝试插入newFooList指针对象类型Foo*.我似乎找不到为FooMap*创建类型的方法在std::mapm_fooMapList.应该用new来完成吗?在map的第二个区域?#include#include#include#include#includeclassFoo{private:intm_foobar;public:Foo(intvalue){m_foobar=value;}voidsetfoobar(intvalue);intgetfoobar();};class

c++ - 如何在 C++ 中填充 int 和 vector<int> 的映射?

我一直在使用,我在其中声明了一个map,如下所示:map>tree;我现在正在尝试为其赋值。我的目标是将多个值作为其键的元素。像这样:0=null1=>02=>1,03=>2,1,04=>3,2,1,05=>0我试过像这样分配给map,但它不起作用:tree[3]=vector(2,1,0);但是,下面两种分配工作的方式:tree[1]=vector(0);tree[2]=vector(1,0);问题出在哪里?我怎样才能创建一个像Python字典一样工作的函数?我没有使用C++11。 最佳答案 对于C++11,您可以尝试:tree[

c++ - std::map::size_type 对于 std::map 其 value_type 是它自己的 size_type

我有一个std::map,float>这占用了太多内存,为了使用更少的内存,我决定将唯一字符串映射到整数(例如std::map,其中每个新的唯一字符串都映射到map的当前size()),并将这些整数值用作映射的成对键(例如,std::map,float>)。而不是int,我想用std::map::size_type:usingmap_index=std::map::size_type;std::pairkey;当然,这不会编译,因为我需要为map提供参数列表:vector.cc:14:19:error:invaliduseoftemplate-name`std::map'without

c++ - 迭代器与反向迭代器

我正在使用std::map来存储很多元素(元素对),我有一个“小”疑问。在我的std::map、iterator或reverse_iterator上迭代所有元素哪个更有效? 最佳答案 根据记录,在std::map和std::set容器上取消引用reverse_iterator是比使用iterator慢两倍——在Intel/AMD处理器上同时使用-O3gcc3.4.6和MSVC(在PPC架构上慢近3倍)同样适用于const_reverse_iterator与const_iterator。这是因为reverse_iterator实际上指

c++ - 包含抽象基类的 ptr_map 的映射对象

我有一个boost::ptr_map,它将抽象基类(例如VectorWrapperBase)存储为值,这允许我将字符串映射到不同类型的vector。boost::ptr_mapmemory_map;//...memory_map.insert(str_key,newVectorWrapper());这似乎有效。但是,当我将memory_map作为另一个类的成员并尝试将该类存储在std::map中时,编译失败。classAgentMemory{//...private:boost::ptr_mapmemory_map;};std::mapagent_map;//...agent_map.

c++ - std::map 和 -fno-implicit-templates

我正在尝试使用g++4.4进行编译并链接一个使用STL的简单程序。我正在尝试使用-fno-implicit-templates来做到这一点,因此必须显式实例化所有模板。我不明白为什么此代码有效:#include//templateclassstd::map;templateclassstd::_Rb_tree,std::_Select1st>,std::less,std::allocator>>;intmain(){std::maptable;return0;}我希望这个程序需要这一行:templateclassstd::map;,但是该行不会使程序链接。std::_Rb_treeli

c++03: std::map 中内置类型的默认构造函数

我一直以为下面的代码std::maptest;std::cout会打印随机值,因为它会在map中创建统一值。然而,事实证明,创建的int实际上总是初始化为零,并且标准内置类型在某些情况下也被初始化为零。问题是:何时对标准类型(int/char/float/double/size_t)执行零初始化?我很确定,如果我在不知名的地方声明inti;,它将包含随机数据。附言问题是关于C++03标准的。这个问题的原因是,现在我不再确定何时必须为int/float/size_t等内置类型提供初始化,或者何时可以安全地省略它。 最佳答案 标准容器(