C++ 比较/搜索数组中多个整数的最佳解决方案

C++ 比较/搜索数组中多个整数的最佳解决方案,c++,performance,c++11,compare,lookup,C++,Performance,C++11,Compare,Lookup,我只是想问您,进行以下比较时,最有效的解决方案是什么: 我从函数中得到一个值。例如6。现在我想将它与多个整数进行比较,如果它相同(true),否则(false),就像典型的if语句一样 现在,我已经使用了一个数组,但是我非常确定,对于每个数组元素,都没有必要一直检查值是否在其中 有谁能告诉我一个更准确有效的方法吗 将视为注释中已经提到的@Sam Varshavchik,您可以使用存储数组中的所有值及其用于查找,这在平均情况下具有恒定时间复杂性 以下是示例代码: #include <iost

我只是想问您,进行以下比较时,最有效的解决方案是什么:

我从函数中得到一个值。例如
6
。现在我想将它与多个整数进行比较,如果它相同(
true
),否则(
false
),就像典型的
if语句一样

现在,我已经使用了一个
数组
,但是我非常确定,对于每个数组元素,都没有必要一直检查值是否在其中

有谁能告诉我一个更准确有效的方法吗


视为注释中已经提到的@Sam Varshavchik,您可以使用存储数组中的所有值及其用于查找,这在平均情况下具有恒定时间复杂性

以下是示例代码:

#include <iostream>
#include <unordered_set>

int fun()
{
   /* return some integer */
   return 1;
}

int main()
{
   std::unordered_set<int> Arr = {1,2,3,4,5,6};
   std::cout << std::boolalpha << (Arr.find( fun() ) != Arr.cend());
   // or
   // (Arr.find( fun() ) != Arr.cend()) ?  std::cout << "Found\n": std::cout << "Not Found\n";

   return 0;
}
#包括
#包括
int fun()
{
/*返回一些整数*/
返回1;
}
int main()
{
无序_集Arr={1,2,3,4,5,6};

std::cout为了补充前面的答案,这里有一个简单的基准,比较
无序集
向量
/
查找
向量
/
二进制搜索

#包括
#包括
#包括
#包括
#包括
#包括
std::random_device rd;//仅用于初始化(种子)引擎一次
std::mt19937 rng(rd());//使用了随机数引擎(本例中为Mersenne Twister)
一致分布uni(0,6);//保证无偏
int fun()
{
/*返回一些整数*/
返回单位(rng);
}
常数大小=1000000;
int main()
{  
发现挥发性bool;
{//无序_集
无序集VAL={1,2,3,4,5,6};
{
boost::timer::auto\u cpu\u定时器;

对于(volatile size\u t i=0;i谢谢您的建议

我的新解决方案(@SamVarshavchik suggestion)现在看起来如下:

std::unorderet_set<int> values= { 7, 8, 10, 13, 14, 16, 60, 17, 19, 24, 26, 27, 28, 33, 34, 39 };

bool check_value() {


    if (values.find( grabvalues() ) != values.cend()) { return true; }
    else { return false; }


}
无序集值={7,8,10,13,14,16,60,17,19,24,26,27,28,33,34,39}; 布尔校验值(){ if(values.find(grabvalues())!=values.cend()){return true;} else{return false;} }
你应该打开你的C++书,解释如何使用<代码> STD::unOrdEdEdSub < /Cord>,然后开始阅读。@ SavaValvikk是正确的解决方案。如果数字的范围不是太大,你甚至可以考虑使用<代码> STD::vector < /代码>。你也可以对数组进行排序,并使用 STD::BialySythys< /Cord>。只是在产生相同的结果。但是它是你所希望的更高效的方法。你也可以考虑使用<代码>(AR.Cube(Fund))>0),这有点直观。在这种情况下,“KyoalPaApHind”是另一种选择。但是在搜索的过程中,使用find是我更可读的代码。我倾向于使用<代码>计数(…)
对于
设置
类型和
查找(…)
对于
映射
-类型。但这只是一个品味问题,你的答案仍然是正确的。(向上投票)
返回值。查找(grabvalues())!=values.end()
很好…!但是,你错过了向量变量。(向上投票)
std::unorderet_set<int> values= { 7, 8, 10, 13, 14, 16, 60, 17, 19, 24, 26, 27, 28, 33, 34, 39 };

bool check_value() {


    if (values.find( grabvalues() ) != values.cend()) { return true; }
    else { return false; }


}