用于在向量中查找整数对的unordered_set创建

时间:2019-07-02 06:46:36

标签: c++ unordered-set

要在向量中查找对,我正在使用tabledata。我需要帮助,以防止创作失败。

我正在研究一些代码,试图在向量中找到对。我需要unordered_set作为逻辑。

这是我的代码:

unordered_set

错误消息:

int sockMerchant(int n, vector<int> ar) {
    set<int> colors = new unordered_set<int>();

    int pairs;

    for ( int i = 0 ; i < n ; i++ ) {
        if(!colors.contains(ar[i])) {
            colors.insert(ar[i]);
        } else {
            pairs++; 
            colors.erase(ar[i]);
        }
    }
    return pairs;
}

退出状态

Solution.cpp: In function 'int sockMerchant(int, std::vector<int>)':
Solution.cpp:10:23: error: conversion from 'std::unordered_set<int>*' to non-scalar type 'std::set<int>' requested
     set<int> colors = new unordered_set<int>();
                       ^~~~~~~~~~~~~~~~~~~~~~~~
Solution.cpp:15:20: error: 'class std::set<int>' has no member named 'contains'
         if(!colors.contains(ar[i])) {
                    ^~~~~~~~

除了要创建的1 之外,我还包含要使用的内容。

1 个答案:

答案 0 :(得分:2)

这里有很多问题(而且编译器很好,可以提供很多有用的信息)

  1. 您正在尝试将std::unordered_set<int>*分配到std::set<int>变量中。类型不匹配,一种是指针(从new()返回),另一种是局部堆栈变量。实际的类别与unordered_set != set

  2. 都不匹配
  3. std::setstd::unordered_set都没有名为contains的成员函数(至少在当前的C ++标准中没有,将在C ++ 20中可用)。您可以只使用find中的std::unordered_set成员函数来查看元素是否已在集合中。

您可以在这里查看类的定义: https://en.cppreference.com/w/cpp/container/unordered_set

在另一个说明中,如果不需要使用new,请不要使用它。该函数不返回您创建的集合。 如果您坚持使用new,则在使用完该集后应使用delete,否则将出现内存泄漏。