Как искать в множестве векторов целых чисел - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь сформировать набор векторов целых чисел и, проверяя, существует ли такое же решение в наборе, я не получаю правильного ответа.

Это относится к C ++ 11.Я также опубликовал подобный запрос ранее, но не получил никаких значимых ответов.Почему всякий раз, когда мы формируем карту или набор векторов, он не может распознать, если я вставлю вектор, идентичный тому, который я уже вставил?Я искал ответ с месяцев.Кроме того, поскольку такое поведение разрешено в других языках, таких как Java, необходимо обойти это.Было бы замечательно, если бы кто-то мог указать, почему это поведение не работает так, как я ожидаю, и каким должно быть это вероятное решение.

Приведенный ниже код является решением проблемы 3Sum в Leetcode,но не работает именно из-за того, что я объяснил выше.

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 голосов
/ 06 мая 2019

Вы можете использовать кортежи в наборе вместо векторов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...