我有一個類,我在其中宣告了一個這樣的集合:
std::set<UPFIR::RetentionSignal*> _retSignalSet;
我正在嘗試在其上使用 std::less 比較函式。我試過這樣的事情:
std::set<UPFIR::RetentionSignal*, std::less<UPFIR::RetentionSignal*>> _retSignalSet;
我得到的反饋是“添加 std::less 不會使它成為確定性。你必須比較名稱”,有人可以解釋我如何完成,因為我以前沒有使用過 std::less 嗎?
謝謝
uj5u.com熱心網友回復:
如果要求集合應按名稱排序,則std::less無濟于事。您必須提供一個自定義比較器來比較名稱。例如(只是一個未經測驗的草圖):
struct LessByName {
bool operator<(UPFIR::RetentionSignal* a, UPFIR::RetentionSignal* b)
{
return a->name < b->name;
}
};
然后像這樣使用它
std::set<UPFIR::RetentionSignal*, LessByName> _retSignalSet;
順便說一句,評論“std::less不會使其具有確定性”是錯誤的,因為它std::less被定義為提供指標的總順序。您獲得的訂單可能不是完成任務所需的訂單。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/375255.html
上一篇:在指標地址中存盤值的問題
