C++ 如何在一组整数向量中搜索

C++ 如何在一组整数向量中搜索,c++,c++11,C++,C++11,我试图形成一组整数向量,在检查向量集中是否存在相同的解时,我没有得到正确的答案 这是关于C++11的。我之前也发布过类似的查询,但没有得到任何有意义的回复。 为什么当我们形成一个映射或一组向量时,如果我插入一个与我已经插入的向量相同的向量,is就无法识别? 几个月以来我一直在寻找答案。此外,由于这种行为在其他语言(如Java)中是允许的,因此必须对此进行改进。如果有人能指出为什么这种行为没有按我预期的方式工作,以及可能的解决方案,那就太好了 下面的代码是Leetcode上3Sum问题的解决方案,

我试图形成一组整数向量,在检查向量集中是否存在相同的解时,我没有得到正确的答案

这是关于C++11的。我之前也发布过类似的查询,但没有得到任何有意义的回复。 为什么当我们形成一个映射或一组向量时,如果我插入一个与我已经插入的向量相同的向量,is就无法识别? 几个月以来我一直在寻找答案。此外,由于这种行为在其他语言(如Java)中是允许的,因此必须对此进行改进。如果有人能指出为什么这种行为没有按我预期的方式工作,以及可能的解决方案,那就太好了

下面的代码是Leetcode上3Sum问题的解决方案,但由于我上面所解释的原因,它不起作用

vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>>result;
        unordered_map<int,int>m;
        set<vector<int>>res;
        bool flag=false;

        if(nums.size()<=2)
            return result;
        vector<int>temp;

        for(int i=0;i<nums.size()-1;i++)
        {
            int comp=-(nums[i]+nums[i+1]);
            if(m.find(comp)!=m.end())
            {
                auto location=m.find(comp);
                temp.push_back(comp);
                temp.push_back(nums[i]);
                temp.push_back(nums[i+1]);

                if(res.find(temp)==res.end())
                 {
                    res.insert(temp);
                    result.push_back(temp);
                 }

                temp.clear();
            }

            else
            {
                m[nums[i]]=i+1;
                m[nums[i+1]]=i+2;
            }
        }
        return result;
    }
vector三和(vector&nums){
向量结果;
无序地图;
塞特雷斯;
布尔标志=假;

如果(nums.size(),则可以在集合中使用元组而不是向量

#include <tuple>
#include <set>
#include <iostream>

using std::get;

int main(int argc, char* argv[]) {
    std::set<std::tuple<int,int,int>> sums;

    auto tup1 = std::make_tuple(0, 0, 0);
    sums.insert(tup1);
    auto tup2 = std::make_tuple(0,0,0);
    sums.insert(tup2);
    std::cout << sums.size() << std::endl;
    for (auto& item : sums) {
        std::cout << "(" << get<0>(item) << "," << get<1>(item) << "," << get<2>(item) << ")\n";
    }
    return 0;
}

#包括
#包括
#包括
使用std::get;
int main(int argc,char*argv[]){
std::集合和;
auto tup1=std::make_tuple(0,0,0);
总额。插入(1);
auto tup2=std::make_tuple(0,0,0);
总额。插入(2);

std::cout您在哪里向
res
集合添加任何内容?嗨,Shawn,我很抱歉,我复制的代码不正确。我现在复制了正确的代码。我错误地粘贴了我正在调试的代码。确实
std::set
s和
std::map
s包含唯一值。不幸的是,此函数没有返回
std::set
,但是一个
std::vector
,它可以包含重复的值,这就是为什么你要得到它们。嗨@SamVarshavchik,但我已经创建了一个集合。因此它不应该也执行只给我们唯一结果的功能吗?如果不是,还有什么替代的解决方案?是的,你已经创建了一个
std::set
。a它将有唯一的值。但是你没有返回这个集合。你返回的是一个向量。仅仅因为你有一个集合并不意味着在同一个函数中使用的其他一些不相关的向量也将有唯一的值。你能指出这个函数中确保只向你要返回的向量添加一个唯一值的确切行吗rning?我很好奇为什么这会被否决?集合中的元组可以很容易地转换为向量,这些向量由它们的3sum函数返回。