【发布时间】:2012-12-07 00:47:41
【问题描述】:
我正在编写一个程序,在其中创建了一个 POD 结构的 std::vector。结构的成员之一是唯一标识符。
为了能够使用 std::binary_search 我必须为结构实现 operatorhere 的指导方针,我正在为 ==、!=、、>= 和
这提出了一个我不知道如何处理的问题。向量将按我分配给每个结构的唯一 ID 排序。如果两个结构具有相同的标识符,则它们是相同的。但是,在我看来,如果两个结构具有相同的标识符但其他成员中的数据不同,则可能会出现这种情况。
这绝不应该发生。然后让比较运算符检查其余字段并在它们不同但ID相同时抛出异常是否合适?什么样的例外最合适?
【问题讨论】:
-
我认为基于 id 比较的
std::set更适合这项任务。 -
如果您希望此条件在运行时可恢复,那么
throw将是合适的。如果没有,assert可能是更好的选择。 -
@chris 我选择了 std::vector 因为我需要内存是连续的。我不知道 set(或任何其他订购的容器)提供此保证。
-
这里的比较是红鲱鱼。如果这些结构中的任何一个都不应该存在共享唯一标识符,那么为什么要等到比较它们才能发现呢?将此类型的构造函数设为私有,并提供保证它的工厂函数。
-
@GManNickG 存在相同结构的两个副本不是错误。错误是存在两个共享 ID 但信息不同的结构。如果我这样做了,结构将不再是 POD。
标签: c++ exception operator-overloading