【发布时间】:2016-05-17 13:50:50
【问题描述】:
我有 2 个向量,其中包含我在单元测试中使用的自定义对象。我无法更改向量中包含的对象的实现,并且对象不包含 == 重载。
我想在单元测试结束时比较这些向量中的每个对象,以确定它们在其中一个成员变量中是否具有相同的值。
目前我正在对向量进行排序,然后像这样循环遍历内容:
// Sort predicate
bool SortHelper(MyObject& w1, const MyObject& w2)
{
return (w1.MyInt() < w2.MyInt());
};
...
//Ensure the sent and received vecs are the same length
ASSERT_EQ(vectorOne.size(), vectorTwo.size());
// Sort the vectors
std::sort(std::begin(vectorOne), std::end(vectorOne), SortHelper);
std::sort(std::begin(vectorTwo), std::end(vectorTwo), SortHelper);
// Ensure that for each value in vectorOne there is a value for vector2
auto v1Start = std::begin(vectorOne);
auto v1End = std::end(vectorOne);
auto v2Start = std::begin(vectorTwo);
auto v2End = std::end(vectorTwo);
if ((v1Start != v1End) && (v2Start != v2End))
{
while (v1Start != v1End) {
EXPECT_TRUE(v1Start->MyInt() == v2Start->MyInt());
++v1Start;
++v2Start;
}
}
我也尝试了一些 std::find_if 的组合来实现这个目标,但我没有找到解决方案。
我知道在 C# 中我可以像这样比较内容:
foreach (MyObject m in listOne)
{
Assert.IsTrue(listTwo.Any(i => m.MyInt == i.MyInt));
}
谁能告诉我一个更好/更简洁的方法来比较我的向量的内容。我想尽可能使用 STL 和/或 Boost
【问题讨论】:
标签: c++ c++11 boost vector stl