一尘不染

检查向量的所有元素在C ++中是否相等

algorithm

如果我有一个值向量,并想检查它们是否都相同,那么在C
中有效做到这一点的最佳方法是什么?如果我使用R之类的其他语言进行编程,我会跳到的唯一方法是返回容器的唯一元素,然后如果唯一元素的长度大于1,则我知道这些元素不能相同。在C
中,可以这样完成:

//build an int vector
std::sort(myvector.begin(), myvector.end());
std::vector<int>::iterator it;
//Use unique algorithm to get the unique values.
it = std::unique(myvector.begin(), myvector.end());
positions.resize(std::distance(myvector.begin(),it));
if (myvector.size() > 1) {
    std::cout << "All elements are not the same!" << std::endl;
}

但是,阅读有关互联网和SO的信息时,我会看到其他答案,例如使用set或find_if算法。那么,最有效的方法是什么?为什么?我想我的方法不是最好的方法,因为它涉及到对每个元素进行排序,然后对向量进行大小调整,但我可能是错的。

谢谢,本


阅读 199

收藏
2020-07-28

共1个答案

一尘不染

您无需使用std::sort。可以用一种更简单的方法来完成:

if ( std::adjacent_find( myvector.begin(), myvector.end(), std::not_equal_to<>() ) == myvector.end() )
{
    std::cout << "All elements are equal each other" << std::endl;
}
2020-07-28