我有一个看起来像的载体:
{-2, -2, 4, 4, 6} (Vector is not sorted!)
现在我想创建一个if子句:
如果Vector只包含-2或所有其他元素都相同,则它是一个很好的向量。如果没有那么它就是一个坏的载体
示例:所以{-2,1,1,1,1,-2}
可以,1或-2都可以,但{-2,1,2,3,-2}
会很糟糕,因为除了-2之外,其他元素都不一样。
所以我用std :: find
尝试了if (std::find(vector.begin(), vector.end(), !-2 || !max) != subBinNo.end())
但它不起作用。
答案 0 :(得分:1)
您可以使用std:set
解决此问题的一种方法。 set
仅包含唯一值,因此如果我们将向量复制到集合中,则只有唯一元素才会出现在集合中。这意味着在您的情况下,如果集合包含-2而另一个元素需要大小为2,否则如果大小为1则该向量仅包含相同的元素。这样做会给我们看起来像
bool unique_ignore_negative_two(const std::vector<int>& data)
{
std::set<int> unique{data.begin(), data.end()};
return (unique.size() == 1) || ( unique.size() == 2 && unique.count(-2) == 1);
}
然后你会像
一样使用它if (unique_ignore_negative_two(vector_name)
{
// do true stuff
}
else
{
// do false stuff
}
答案 1 :(得分:1)
另一种不需要修改原始vector
的解决方案是:
bool isVectorSame(std::vector<int> const& vector)
{
bool result = true;
const auto firstNot = std::find_if_not(vector.begin(), vector.end(), [](auto i) { return (i == -2); });
if(firstNot != vector.end())
{
result = std::all_of(firstNot, vector.end(), [&](auto i) { return ((i == -2) || (i == (*firstNot))); });
}
return result;
}
这个想法如下:
!= -2
* std::all_of
,检查vector
中的每个值是否等于-2
或步骤1中找到的值。看到它运行here。
*如果找不到!= -2
的值,则向量将填充-2
并通过测试。
答案 2 :(得分:0)