我有一个对象,可以通过它的名称来识别,我想把它放在一个STL 容器中。
class MyClass {
public:
//getters and setters, other functions
private:
std::string name;
//other member variables
};
所以起初我认为在我的情况下使用类似地图的结构是无关紧要的,因为在这些结构中,标识符(键)与类本身是分开的。使用映射,我必须返回 name 变量并将其复制到类“外部”(浪费内存和不合逻辑,违反 OOP 规则)。
我的下一个镜头是使用类似集合的结构。在这种情况下,我只有关键字段,我在其中加载整个对象。使用这种方法,我必须重载 <、> 和 == 运算符才能使用对象作为键。如果我使用 unordered_set,我什至可以制作一个用于散列的函子,它工作得很好。这里的问题是我不能像使用地图那样使用容器功能。这是有效mapInstance.find("example")
的,这不是setInstance.find("example")
。我必须创建一个将成员变量name
设置为“example”的对象并将其传递给find()
函数。这个解决方案的问题是我的类中的其他成员变量是重复的并且没有使用。std::string
我什至尝试为and重载 <、> 和 == 运算符MyClass
类,如果我像这样使用它们,效果很好stringInstance < MyClassInstance
,但是容器函数无法使用(我什至尝试重载仿函数以使用字符串但没有成功)。
你能建议我一个简单的方法(或方法),如何用std::set
或std::map
(也许是其他人)解决这个问题?std::map
关键不能是参考(据我所知),我不知道如何用std::set
.
注意:在 a 的 key 字段中存储指针的问题map
是,如果我们改变主意并使用unordered_map
而map
不是对于一个简单的任务来说似乎非常复杂)。
谢谢你的帮助!