我正在写一个程序,我创建了一个std :: POD结构的向量。该结构的一个成员是唯一标识符。应该在这种情况下运营商==或!=投掷?
为了能够使用std :: binary_search,我必须为结构实现运算符<。遵循指南here,我正在为==,!=,<,>,> =和< =写入整套重载。
这提出了一个问题,我不知道如何处理。该矢量将按照我分配每个结构的唯一ID进行排序。如果两个结构具有相同的标识符,则它们是相同的。但是,如果两个结构体在其他成员中具有相同的标识符但数据不同,那么情况就会出现。
这不应该发生。让比较运算符检查剩余的字段,然后抛出异常(如果它们不同但ID相同)是否合适?什么样的例外将是最合适的?
我认为一个'std :: set'与基于id的比较更适合这个任务。 – chris
如果你希望这个条件在运行时是可以恢复的,那么'throw'就是合适的。如果不是,'assert'可能是更好的选择。 – phonetagger
@chris我去了std :: vector,因为我需要内存连续。我不知道该集(或任何其他有序容器)提供了这种保证。 – Kian