【发布时间】:2022-01-03 20:43:12
【问题描述】:
我有一个简单的地图 std::map
auto cit = str_map_.find(str);
if (cit != str_map_.end()) {
...
}
在 'bool my_namespace::operator!=(const T1&, const T2&) 的实例化中 [with T1 = std::__detail::_Node_iterator<:pair std::__cxx11::basic_string my_namespace::>; T2 = std::__detail::_Node_iterator<:pair std::__cxx11::basic_string my_namespace::mytype false true>]':没有匹配的函数...
我将它调试到我相当有创意的比较运算符 my_namespace::MyType:
template <class T>
struct MyType {
T* mt_;
};
struct MyTempClass {
std::string mtc_;
static int Compare(MyType<MyTempClass> const& lhs, MyType<MyTempClass> const& rhs) {
return lhs.mt_->mtc_.compare(rhs.mt_->mtc_);
}
static int Compare(std::string const& lhs, MyType<MyTempClass> const& rhs) {
return lhs.compare(rhs.mt_->mtc_);
}
static int Compare(MyType<MyTempClass> const& lhs, std::string const& rhs) {
return lhs.mt_->mtc_.compare(rhs);
}
};
template <class T1, class T2>
bool operator !=(T1 const& lhs, T2 const& rhs) {
int res = MyTempClass::Compare(lhs, rhs);
return (res != 0);
}
template <class T1, class T2>
bool operator ==(T1 const& lhs, T2 const& rhs) {
int res = MyTempClass::Compare(lhs, rhs);
return (res != 0);
}
static std::unordered_map<std::string, MyType<MyTempClass>> my_map;
但我仍然不明白为什么会发生这种情况:相同的代码在普通地图上也能正常工作,而值类型不应该参与迭代器比较?
【问题讨论】:
标签: c++ unordered-map