如何搜索一组整数向量

时间:2019-05-06 02:57:29

标签: c++ c++11

我试图形成一组整数向量,并检查集合中是否已经存在相同的解决方案,所以我没有得到正确的答案。

这是关于C ++ 11的。我也早些时候发布过类似的查询,但是没有得到任何有意义的答复。 为什么每当我们形成一个地图或一组向量时,都无法识别是否插入了与已经插入的向量相同的向量? 自几个月以来,我一直在寻找答案。另外,由于在其他语言(例如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;
    }

输入为 [0,0,0,0] 答案应该是: [0,0,0] 而我得到: [[0,0,0],[0,0,0]]

1 个答案:

答案 0 :(得分:-1)

您可以在集合中使用元组而不是向量。

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