使用哈希从链接列表中删除重复项

时间:2019-06-26 09:10:01

标签: c++ linked-list

我尝试使用哈希从链接列表中删除重复项。不是使用dplyr,而是使用向量来跟踪事件。我运行了一个简单的测试用例,但结果却是我不理解。 我的代码是:

mutate_at(df,"c2",
                 function(x) 
                   ifelse(x>4,100,x))

我尝试了以下测试用例 2 3 3 4 6.这是链接列表中节点的数据。

我得到的结果就是这个。

unordered_map

实际结果应该是

class Solution {
   public:
         Node* removeDuplicates(Node *head) {
             vector<int> vec{10000 , 0};
             auto tmp = head;
             auto tmp2 = tmp;
             while (tmp) {
                 vec[tmp->data]++;
                 cout << "Data : " << tmp->data << " counter " << vec[tmp->data] << "\n";
                 if (vec[tmp->data] > 1) {                     
                     tmp2->next = tmp2->next->next;
                 }
                 tmp2 = tmp;
                 tmp = tmp->next;
             }
             return head;
         }

1 个答案:

答案 0 :(得分:3)

vector<int> vec{10000, 0};使用带有10000的构造函数,创建一个包含两个元素0std::initializer_list的向量:

vector(std::initializer_list<T> init, const Allocator& alloc = Allocator());

您很可能需要vector<int> vec(10000, 0);。这将使用

创建一个由0初始化的10000个元素的向量。
vector(size_type count, const T& value, const Allocator& alloc = Allocator());

标准reads [over.match.list]

  

当非聚合类类型为T的对象被列表初始化,使得[dcl.init.list]指定根据本小节中的规则执行重载解析时,重载解析会在两个方面选择构造函数阶段:

     
      
  • 最初,候选函数是类T的初始化器列表构造函数([dcl.init.list]),参数列表包括作为单个参数的初始化器列表。
  •   
  • 如果未找到可行的初始值设定项列表构造函数,则再次执行重载解析,其中候选函数为类T的所有构造函数,并且参数列表由初始值设定项列表的元素组成。 li>