這裏使用的問題就是一個例子:與關聯容器的使用自定義的比較類型
std::set<std::string, SpecialCompareLess> setSpecial;
我記得當我們使用定製的比較類型定義的關聯容器,我們需要注意一些潛在的問題。但我忘記了這些問題。
類似於:如果您在關聯容器上使用STL算法,則必須提供此類專用比較器,而不是讓算法選取默認比較器。否則,你將無法獲得正確的結果。
如果有人知道我在說什麼,你能提醒我關心什麼嗎?
謝謝
這裏使用的問題就是一個例子:與關聯容器的使用自定義的比較類型
std::set<std::string, SpecialCompareLess> setSpecial;
我記得當我們使用定製的比較類型定義的關聯容器,我們需要注意一些潛在的問題。但我忘記了這些問題。
類似於:如果您在關聯容器上使用STL算法,則必須提供此類專用比較器,而不是讓算法選取默認比較器。否則,你將無法獲得正確的結果。
如果有人知道我在說什麼,你能提醒我關心什麼嗎?
謝謝
有很多這樣的問題,並且他們中的很多難以總結,所以沒有這樣他們一個共同的參考。但根據我自己的經驗,我可以告訴你幾個最常見和最有用的: 1.如你所知,比較函數可以是任何可調用類型(函數,lambda,函數引用等)。但總是使用函子或lambda表達式,因爲編譯器總是將它們內聯,所以你可以獲得更好的性能。 2.不要忘記將比較器的參數聲明爲常量引用。 3.如果您始終可以編寫封裝器來封裝您的comaprator大代碼 4.嘗試在FP中編寫像純函數一樣的比較器。 5.如果你的容器由指針組成,你必須編寫自己的比較器,因爲默認比較器會對指針值進行排序而不是對它們進行解引用。 6.記住等式和等價之間的數學差別,以便編寫正確的比較器返回類型(例如,爲相等而爲假)。 也可以在Musser,Meyers和Herb Sutter的書中找到這樣的幾個建議。
你應該看看Scott Meyer的「Effective STL」一書;它涵蓋了這些問題,但我不記得它對這個問題的描述。 –