草庐IT

c++ - 我可以使用成员变量作为 hash_set/hash_map 的键吗?

我有这样一个类:classFoo{longlongId;stringx;stringy;//othermembervariablesandfunctions};我想将其存储在hash_set中(或hash_map),但使用Id成员变量作为插入和搜索的键。我不确定我该怎么做。我想到了以下几种方法,但都不是很好:1)我可以编写一个自定义散列函数,使用Id对对象进行散列,但我不能使用find()hash_set上的方法通过Id(longlong)查找项目,因为它需要Foo要传入的对象。2)我可以复制Id并创建一个hash_map而不是hash_set但我有1亿个这些对象的实例,所以我不想复制

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++ - map 性能问题

如果有人可以帮助我,我完全没有想法。所以我有这段代码(这是我的代码的一个非常简化的版本):while(readNewFile()){while(getNewStructFromFile()){unsignedlongstarttime=GetTickCount();customerData.fillFromBinaryData(structPointer);cout(customerData.phoneNumber,""));}//OuptutalldataaMap.clear();}基本上,它只是从二进制文件中读取记录。customerData获取数据并用其中的数据填充其变量。然后,

c++ - 序列化结构的 STL 映射

我正在尝试序列化一个STL映射,其中键和值是结构。当键是一个结构并且值是一个int时,附加的代码工作正常。但是,我在设置序列化函数来处理结构值时遇到问题。有关如何执行此操作的任何建议?非常感谢-安德鲁。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusingnamespacestd;structportfolio_data{doublea;};st

C++ 静态初始化 map<float, float[3]>

因此,我有一个mapmyMap,我正在尝试对其进行静态初始化(必须以这种方式完成)。我正在做以下事情:myMap={{415,{1,52356,2}},{256,{356,23,6}},//...etc};但是我收到以下错误:“数组初始值设定项必须是初始值设定项列表。”我上面的语法有什么问题? 最佳答案 你应该使用array而不是“普通”数组:#include#include#includeintmain(){std::map>myMap{{415,std::array{1,52356,2}},{256,std::array{356

c++ - 变量模板 + std::map 的通用 lambda

安answertoC++14VariableTemplates:whatisthepurpose?Anyusageexample?提出了一个变量模板+通用lambda的用法示例,看起来像这样:voidsome_func(){templatestd::mapstorage;autostore=[](intkey,constT&value){storage.insert(key,value)};store(0,2);store(1,"Hello"s);store(2,0.7);//Allthreevaluesarestoredinadifferentmap,accordingtotheir

c++ - 如何在不移动的情况下交换 map 元素?

如果我有两个map我如何交换每个map中的一个元素??例如:mapps{{"triangle",0},{"cross",1},{"square",2},{"circle",3}};mapxbox{{"y",0},{"a",1},{"b",2},{"x",3}};swap(move(ps["cross"]),move(xbox["x"]));swap声明显然是错误的,但这解释了我想做什么。swap之后我想要声明ps包含:{"triangle",0}{"x",3}{"square",2}{"circle",3}和xbox包含:{"y",0}{"a",1}{"b",2}{"cross",1}

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++ 模板参数

这段代码有什么问题:标题:#includeusingnamespacestd;templateclassValueCollection{public:ValueCollection(void);intgetValueCount(void);mapValues;};实现:#include"ValueCollection.h"ValueCollection::ValueCollection(void){}intValueCollection::getValueCount(void){returnValues.size();}测试:#include"ValueCollection.h"TES