【发布时间】:2015-11-03 09:32:18
【问题描述】:
我需要按 Blah 的整数 id 对自定义类型 std::vector<Blah> v 的向量进行排序。我通过std::sort(v.begin(), v.end()) 执行此操作,运算符< 在Blah 中被重载为
bool operator< (const Blah& b) const { return (id < b.id); }
我注意到 Blah 的私有 id 不能声明为 const int id,否则 Blah 类型不符合 std::sort 的要求(我假设它与不可 ValueSwappable 冲突?)
如果 id 不是 const 一切都很好。但是,我不喜欢对象没有常量 id 只是为了在向量中重新排列它们的顺序的想法。
有没有办法,或者是这样吗?
【问题讨论】:
-
Id
id应该是唯一的吗?如果没有,您可以简单地确保除了赋值运算符之外的任何内容都不会导致Blah对象的 id 被修改。 -
是的,实际上
id需要是唯一的。 -
我在做一个疯狂的猜测:你想在 id 之后排序以便能够按 id 访问元素。为此,地图会更合适。
-
@IorisN:地图是非常有用的数据结构。确实,排序的向量有时(通常?)更快,但在您真正看到需要性能之前使用映射 - 映射更方便。
-
是的,您可能可以在谷歌上搜索一些关于 STL 向量和性能的好文章 - 一个原因是数组/向量具有良好的缓存局部性,这有时对性能有很大帮助。但是地图对于性能也非常有好处 - 例如,它们不需要像哈希表那样重新散列,因此性能在 100% 的时间里都是对数的。