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; }
}