【发布时间】:2018-04-08 00:15:36
【问题描述】:
我想使用映射来根据成员输入向量计算对象对。如果为此目的有更好的数据结构,请告诉我。 我的程序返回一个 int 向量列表。每个 int 向量是两个 int 向量(一对 int 向量)之间比较的输出。然而,比较的输出可能不同,尽管两个 int 向量相同(可能顺序不同)。我想存储每对 int 向量产生了多少不同的输出(int 向量)。
假设我可以使用 .inp() 访问我的对象的 int 向量
当(a1.inp() == a2.inp() && b2.inp() == b1.inp()) 或(a1.inp() == b2.inp() and b1.inp() == a2.inp()) 时,应将两对(a1,b1) 和(a2,b2) 视为相等。
This answer 说:
根据定义,映射 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;
}
};
【问题讨论】:
-
在您的
operator<中订购每一对,使最低的为第一。然后是正常的词法小于比较。 -
这可能是一个 XY 问题,您能否详细说明为什么需要此比较,它如何帮助您“计算输入向量对”?你真正想做什么?