我有2个向量,每个向量包含某些元素
for(int i=0;i<vec1.size();i++){
int low = lower_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
int up = upper_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
}
for(int i=0;i<vec1.size();i++){
int low = lower_bound(vec1.begin(),vec1.end(),vec2[i])-vec1.begin();
int up = upper_bound(vec1.begin(),vec1.end(),vec2[i])-vec1.begin();
}
以下是整个代码段:
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
vec1.push_back((arr[i]*arr[j])+arr[k]);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
{
if(arr[k]==0)
continue;
else
vec2.push_back((arr[i]+arr[j])*arr[k]);
}
sort(vec1.begin(),vec1.end());
sort(vec2.begin(),vec2.end());
int res=0;
for(int i=0;i<vec1.size();i++)
{
int low = lower_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
int up = upper_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
res+=(up-low);
}
for(int i=0;i<vec1.size();i++)
{
int low = lower_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
int up = upper_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
res+=(up-low);
}
现在基本上我要做的是找到vec1和vec2中元素的总出现次数。我面临的问题是即使两个代码实际上都实现相同的逻辑,也会为res提供不同的值。 这不应该发生,因为它们的逻辑相同。 使用的载体具有相同的大小。 这在某种程度上是我不知道的下界和上界的意外行为吗?
答案 0 :(得分:0)
这是您的完整代码吗? 我在你的代码中不明白你想要什么?
int res=0;
for(int i=0;i<vec1.size();i++)
{
int low = lower_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
int up = upper_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
res+=(up-low);
}
for(int i=0;i<vec1.size();i++)
{
int low = lower_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
int up = upper_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
res+=(up-low);
}
如果要计算两者中出现的值,则应使用res1和res2等2个变量。
我想你想这样做:
例如:如果arr = [1,2]则vec1和vec2都包含[2,3,3,3,4,4,5,6] 排序后。你想要找到2,3,4,5和6的出现 两个载体。我是对的吗?
如果是,那么您首先需要在向量中找到唯一值。但是现在您在循环中三次搜索值3。
将这两个向量转换为集合后。使用以下代码。
int res=0;
for(int i=0;i<vec1.size();i++)
{
int low = lower_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
int up = upper_bound(vec2.begin(),vec2.end(),vec1[i])-vec2.begin();
res+=(up-low);
}
int res2=0;
for(int i=0;i<vec2.size();i++)
{
int low = lower_bound(vec1.begin(),vec1.end(),vec2[i])-vec1.begin();
int up = upper_bound(vec1.begin(),vec1.end(),vec2[i])-vec1.begin();
res2+=(up-low);
}
// Compare res and res2 here.
你错过的另一件事是你在两个循环中都在向量看。在第一个循环中,你应该在vector2中设置set1的值,在vector1中设置set2的第二个循环值。
希望这是你想要的。如果没有,请在评论中提问。我会修改我的答案。