假設你的地圖API有迭代器(或指數),是有序的,不包含任何重複,並且還存儲了密鑰和映射類型爲嵌套類型定義,你可以實施std::map::operator==
相同的語義在O(N)
時間:
#include <functional> // less
#include <algorithm> // includes
// O(N) complexity
template<class MyMap, class KeyCmp = std::less<typename MyMap::key_type, class TCmp = std::equal<typename MyMap::mapped_type> >
bool set_equality(MyMap const& lhs, MyMap const& rhs, KeyCmp keycmp, TCmp tcmp)
{
typedef typename MyMap::value_type Pair;
return
lhs.size() == rhs.size() &&
std::includes(
lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(),
[](Pair const& p1, Pair const& p2){
return keycmp(p1.first, p2.first) && tcmp(p1.second, p2.second);
})
;
}
你可以通過一種方式遍歷集合來保證鍵的詞法順序嗎? – Bathsheba
請參閱編輯 - no。 API不提供對內部結構的訪問。 –
簡單的蠻力? –