맵을 사용하여 구성원 입력 벡터를 기반으로 오브젝트 쌍을 계산하려고합니다. 이 목적을 위해 더 나은 데이터 구조가 있다면 알려주십시오. 내 프로그램에서 int 벡터 목록을 반환합니다. 각 int 벡터는 두 int 벡터 (한 쌍의 int 벡터) 사이의 비교 결과입니다. 그러나 두 개의 int 벡터가 같을지라도 (아마도 다른 순서로) 비교 결과는 다를 수 있습니다. 각각의 int 벡터 쌍이 생성 한 몇 개의 다른 출력 (int 벡터)을 저장하고 싶습니다.C++ 오브젝트 쌍에 대한 맵 비교 자
내가 .inp()
두 쌍의 (a1,b1)
및 (a2,b2)
이 동일한 것으로 간주되어야한다 (a1.inp() == a2.inp() && b2.inp() == b1.inp())
또는 (a1.inp() == b2.inp() and b1.inp() == a2.inp())
내 객체의 INT 벡터에 액세스 할 수 있다고 가정.
This answer 말한다하십시오 < B와 B <도에 해당하는 경우지도의 a와 b에
키는 정의에 의해 동일합니다.
class SomeClass
{
vector <int> m_inputs;
public:
//constructor, setter...
vector<int> inp() {return m_inputs};
}
typedef pair < SomeClass, SomeClass > InputsPair;
typedef map < InputsPair, size_t, MyPairComparator > InputsPairCounter;
그래서 문제는 내가지도 비교와 이쌍 동등성을 정의 할 수있는 방법이다. 나는 한 쌍의 두 벡터를 연결하려고 시도했지만, 이는 내가 원하는 것이 아닌
(010,1) == (01,01)
으로 이어진다.
struct MyPairComparator
{
bool operator() (const InputsPair & pair1, const InputsPair pair2) const
{
vector<int> itrc1 = pair1.first->inp();
vector<int> itrc2 = pair1.second->inp();
vector<int> itrc3 = pair2.first->inp();
vector<int> itrc4 = pair2.second->inp();
// ?
return itrc1 < itrc3;
}
};
'연산자 <'에서 각 쌍을 나열하여 최저값이 1이되도록하십시오. 그렇다면 보통 어휘 적 비교가 아닌 것입니다. –
이것이 XY 문제 일 수 있습니다.이 비교가 필요한 이유에 대해 자세히 설명해 주시겠습니까? "입력 벡터 쌍을 계산하는 데 어떻게 도움이됩니까? 너 정말로 무엇을하려고하는거야? –