【发布时间】:2011-10-23 20:38:29
【问题描述】:
我有这样的课:
struct Thing
{
unsigned index;
// more data members
};
我正在使用std::map<Thing> 来包含我的Things。调用代码如下所示:
Thing myThing(/*...*/);
std::map<Thing> things;
things[myThing.index] = myThing;
// ...
Thing &thing3 = things[3];
我想知道是否有一种方法可以直接使用Thing::index,而无需将其隐式复制到pair::first。
我想我需要提供某种Thing 比较运算符,但这没关系。 std::set 可能有效,但我需要一个完整的 Thing 对象作为键:
std::set<Thing> things;
Thing &thing3 = *things.find(Thing(3));
除了将 Thing 重构为 std::pair 之外,我还能用 STL 做得更好吗?
【问题讨论】:
-
这是个好问题;但如果你的密钥只是一个整数,那就不值得了。
-
@K-ballo - 你可能是对的 - 我可以通过在
map插入周围编写模板包装器来改进调用代码,该插入器承认并抽象出对Thing::index的引用。跨度>
标签: c++ stl map set containers