벡터에서 항목을 제거하는 데 사용하고자하는 구조체가 있는데 항목이 표시 될 색인이 무엇인지 알 수 없으므로 값으로 제거합니다. 구조체에서 '=='연산자를 오버로드하는 방법은 무엇입니까?
abc.erase(std::remove(abc.begin(), abc.end(), IsUnderScore()), abc.end());
내가 더이 말을하지 않는 컴파일러 오류가 발생합니다 : 내가 지금처럼 벡터에 사용하려고하면 내가하지만 문자열에서 값을 제거하려면이 구조체를 사용할 수 있습니다
struct IsUnderScore{
bool operator()(char c){
return c=='_';
}
};
: 여기 내 구조체이다 == 연산자와 일치합니다.
그래서 나는이 연산자 자체를 과부하시켜야하고, 따라서 다른 구현물을 살펴 보는 동안 내 케이스와 일치하는 구현을 찾을 수 없다는 것을 알았습니다. 대부분의 다른 버전에는 구조체에 선언 된 변수가 있습니다. 그러나 이것은 현재의 문자가 밑줄과 일치 하는지를보기위한 간단한 bool입니다. 나는 내 사건과 일치하도록 과부하를 어떻게 만들어야하는지 혼란 스럽다.
편집 : 해당 벡터는 방법에 의해 벡터 문자열입니다.
에서 :
대안 (여기에서도 유용합니다,하지만 당신은 제거하기 위해 어떤 요소를 결정하기 위해 더 복잡한 비교를해야 할 경우에 대비) 'IsUnderScore'에는'operator =='의 구현이 없지만'operator()'의 구현은 없습니다. 그것이 문제일까요? – Codor
@Codor : 아니요, 'remove_if'는 호출 가능 항목 (즉, 함수 또는 '연산자()'가있는 클래스)을 필요로합니다. 'remove'는 술어가 아닌 값과 비교할 것을 기대합니다. 이것이 문제입니다. –