주어진 컨테이너에 키 또는 값이 있는지 테스트하는 데 사용되는 템플릿 함수를 작성했습니다.이 템플릿 함수의 모호한 오류를 해결하는 방법
template<typename T>
bool has_key(const T &t, const typename T::key_type &key) {
return t.find(key) != t.end();
}
template<typename T>
bool has_key(const T &t, const typename T::value_type &v) {
for (auto i = t.begin(); i != t.end(); i++) {
if (*i == v) return true;
}
return false;
}
이 std::map
와 std::vector
와 잘 작동합니다. 그러나 컨테이너가 std::set
이면 모호한 오류가 발생합니다. std::set
은 key_type
과 value_type
을 모두 정의하고 있기 때문에 동일한 유형입니다. 그래서 내 질문은 어떻게이 문제를 해결할 것인가? 고맙습니다!
를 사용하여 문제를 해결할 수 있지만 것을
주의 사항? 두 번째는'has_value'라고해야합니다. – chris
왜 두 번째 과부하에서 바퀴를 다시 발명하고 있습니까? 'return std :: find (t.begin(), t.end(), v)! = t.end()'이어야합니다. 사실, 두 오버로드는 아마도 반복자를 리턴해야하고, 단일의 분리 된 함수는'end()'와 비교할 수 있습니다. –
나는 확실히'key_value'가 당신의 코드에서'key_type' 이었음에 틀림 없다. 편집이 잘못된 경우 알려주십시오. –