我正在寫一個程序,我創建了一個std :: POD結構的向量。該結構的一個成員是唯一標識符。應該在這種情況下運營商==或!=投擲?
爲了能夠使用std :: binary_search,我必須爲結構實現運算符<。遵循指南here,我正在爲==,!=,<,>,> =和< =寫入整套重載。
這提出了一個問題,我不知道如何處理。該矢量將按照我分配每個結構的唯一ID進行排序。如果兩個結構具有相同的標識符,則它們是相同的。但是,如果兩個結構體在其他成員中具有相同的標識符但數據不同,那麼情況就會出現。
這不應該發生。讓比較運算符檢查剩餘的字段,然後拋出異常(如果它們不同但ID相同)是否合適?什麼樣的例外將是最合適的?
我認爲一個'std :: set'與基於id的比較更適合這個任務。 – chris
如果你希望這個條件在運行時是可以恢復的,那麼'throw'就是合適的。如果不是,'assert'可能是更好的選擇。 – phonetagger
@chris我去了std :: vector,因爲我需要內存連續。我不知道該集(或任何其他有序容器)提供了這種保證。 – Kian