【问题标题】:insert vector into unordered set after declaration c++在声明c ++后将向量插入无序集中
【发布时间】:2021-07-15 04:00:26
【问题描述】:

我正在寻找一种将元素向量插入到我已经声明的无序集合中的方法。假设我有如下代码:

unordered_set<string> us;
vector<string> v{"green", "dog", "keys"};

这里,us 已经被声明了。 声明之后,如何使用一个命令(即没有 for 循环并单独推送元素)用向量 v 中的元素填充 us

这个类似的答案adding elements of a vector to an unordered set 不是我想要的,因为无序集是在声明期间初始化的。

更好的是,是否可以在一个命令中使用多个元素填充无序集而不使用向量?

【问题讨论】:

    标签: c++ vector initialization declaration unordered-set


    【解决方案1】:

    使用带有insert() 的迭代器。

    us.insert(v.cbegin(), v.cend());
    

    只要序列符合input iterator concept并返回字符串,就不需要向量。数组、其他集合、向量等都可以。

    【讨论】:

    • 它会在没有声明的情况下工作,就像只是一个元素列表{"green", "dog", "keys"}。类似于unordered_set us ({"green", "dog", "keys"}); 可以初始化一个无序集
    • 是的,初始化列表也可以工作,无论是在构造期间还是在插入时。
    • @rjc810 你忘记了#include&lt;string&gt;More quick hack code
    • 您需要将 -std=c++11 添加到参数中。
    • 关于编译器选项的注意事项:添加-Wall -Wextra 以从编译器获取更多诊断消息。如果它可以发现潜在的错误,您可以修复它们,而不必在调试时绊倒它们。还可以考虑添加-O2-O3 来启动优化器。当编译器进行优化时,它需要更长时间、更深入地查看您的代码才能对其进行优化。更长、更深入的观察通常还会发现编译器可以警告您的更多事情。
    猜你喜欢
    • 2018-05-08
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2022-10-23
    相关资源
    最近更新 更多