草庐IT

Circle-Map

全部标签

c++ - 使用 unordered_map,其中 Key 是 T 的成员

有没有什么好的方法可以使用unordered_map以便您可以在恒定时间(平均情况下)通过成员变量访问对象?以下示例具有此功能,但需要每个Person的名称复制为key:#include#include#include#includeclassPerson{public:Person():name_(""){}Person(conststd::string&name):name_(name){}std::stringgetName()const{returnname_;}voidkill()const{std::coutmap={{p1.getName(),p1},//Duplicat

c++ - 我可以用 Boost interval_map 做到这一点吗?

我想做的是有效地处理间隔。例如,在我的示例中,间隔如下所示:[10,20],[15,25],[40,100],[5,14]区间是封闭的整数,有些区间可能重叠。我想高效为给定查询找到重叠间隔。例如,如果给出[16,22]:[10,20],[15,25]上述区间应计算为重叠区间。我目前正在写一个基于红黑树的区间树(引用:CLRS,IntroductiontoAlgorithms)。虽然找到所有重叠间隔可以是O(n),但运行时间应该更快。请注意,可以删除和插入间隔。不过,我刚刚发现Boost有interval_map和interval_set:http://www.boost.org/doc

c++ - 如何在cpp中定义volatile元素的map

我想生成一个互斥元素的映射,它可能需要是可变的。我正在尝试定义此类内容:typedefstd::maptMutexMap;tMutexMapmyMutexMap;然后使用简单的map索引,例如:myMutexMap[10]=0;myMutexMap[23]=1;我正在使用gcc4.1.2。gcc编译器不喜欢该代码。我得到一个错误nomatchingfunctionforcallto'std::pair....'"我做错了什么? 最佳答案 C/C++的volatile不像volatile在某些托管语言中与互斥量无关(参见http://

c++ - 为 std::map 中的 std::array 分配多个值

当使用std::array时,我可以一次赋值:std::arraya2={1,2,3};但是当上面的数组组合成一个映射时,我不知道最好的方法:usingnamespacestd;map>myMap;//I'mdoingitlikebelownow...arraytempArray={1,2,3};//canIsavethislinesomehow?myMap[myString]=tempArray;如果这实际上是正确的方法,请告诉我。谢谢! 最佳答案 虽然使用另一个答案中所示的insert效率更高,但您也可以使用myMap["foo

c++ - std::map 对象或对象指针?

我有两个选项来创建标准map。我可以使用这两种类型的map。1.std::map2.std::map其中A是一个类对象稍后在代码中我将不得不执行查找操作。1.std::mapmyMap1;if(myMap1.find(A_obj)!=myMap1.end()){}2.std::mapmyMap2;if(myMap2.find(A_obj_ptr)!=myMap2.end()){}我想知道推荐创建哪一个。在这两个中的哪一个中,我不需要必须重载A类中的任何运算符才能使查找操作正常工作。当任何运算符未重载时,其中哪些会在插入操作时出现问题。如果有帮助,这是A类classA{private:s

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++ - 无法迭代 Poco::Any 的 std::map

我有一个Poco::Any的std::map,我正在尝试对其进行迭代并输出到流中,但出现编译器错误。我的代码如下:map::const_iteratorit;map::const_iteratorend=_map.end();map::const_iteratorbegin=_map.begin();for(it=begin;it!=end;++it){conststd::type_info&type=it->second.type();//compileerrorhere:osfirst(it->second)该行有2个错误:'type'cannotappearinaconstant

c++ - std::map:它可以在插入键后复制和移动键吗?

换句话说,存储指向映射中的键的指针是否安全?或者map是否有可能在其生命周期内复制和移动键,从而使现有指针无效?文档说:“迭代器有效性:没有变化。”这是否意味着我的问题的答案是“不,它们不能被复制或移动”? 最佳答案 std::map容器模板提供了一个基于节点的容器,这意味着迭代器和对容器元素的引用永远不会失效,直到元素被从中删除map。因此,只要map处于事件状态并且元素仍在其中,您就可以将元素键地址分发给第三方。 关于c++-std::map:它可以在插入键后复制和移动键吗?,我们在

C++ 静态初始化顺序 : adding into a map

我们无法确定静态对象的初始化顺序。但这在下面的例子中有问题吗?一个静态变量是一个map(或其他容器)我们从其他静态变量填充该映射代码:classFactory{public:staticboolRegister(name,func);private:staticmaps_map;};//incppfilemapFactory::s_map;boolFactory::Register(name,func){s_map[name]=func;}在另一个cpp文件中staticboolregistered=Factory::Register("myType",MyTypeCreate);当我

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

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