C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C++ unordered_set插入元素(insert插入元素)详解大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
成员函数 insert() 可以插入作为参数传入的单个元素。在这种情况下,它会返回一个 pair 对象,这个 pair 对象包含一个迭代器,以及一个附加的布尔值用来说明插入是否成功。如果元素被插入,返回的迭代器会指向新元素;如果没有被插入,迭代器指向阻止插入的元素。可以用一个迭代器作为 insert() 的第一个参数,它指定了元素被插入的位置,如果忽略插入位置,在这种情况下,只会返回一个迭代器。另一个版本的 insert() 函数可以插入初始化表中的元素,在这种情况下,什么都没有返回。

下面是一些说明性语句:
auto pr = words.insert("ninety"); // Returns a pair - an iterator & a bool value
auto iter = words.insert (PR.first,"nine"); // 1st arg is a hint. Returns an iterator
words.insert({"ten","seven","six"});  // InserTing an initializer list
调用 insert() 插入一段元素时,什么都不返回:
std::vector<String> more { "twenty","thirty","forty" };
words.insert(std::begin(morE),std::end(morE));//Insert elements from the vector
unordered_set 容器的成员函数 emplace() 和 emplace_hint() 可以在容器的适当位置创建元素。正如我们之前所见的 set 容器,传入 emplace() 的参数会被传入元素的构造函数,用来创建元素。emplace_hint() 的迭代器参数可以指定元素的插入位置,后面是构造元素需要的参数。例如:
std::unordered_set<std::pair<String,String>,Hash_pair> names;
auto pr = names.emplace ("Jack","Jones") ; // Returns pair<iterator,bool>
auto iter = names.emplace_hint (PR.first,"John","Smith"); // Returns an iterator
容器的元素是用来表示名称的 pair 对象,这里的每个名称由两个 String 对象组成,它们分别表示一个人的姓和名。unordered_set<T> 元素认的哈希函数一个 hash<T> 类模板的实例。这个模板对基本类型、指针String 对象有一些特例化的定义。

因为没有 hash<pair<String,String>> 模板的特性化定义,所以需要定义一个哈希函数来哈希元素。这里将它的类型指定为 -Hash_pair,它也是模板的第二个类型参数。emplace() 的姓名参数会被传入 pair 的构造函数中,emplace_hint() 使用了一个指向先前插入元素的迭代器,这一点可能会被忽略。后面的参数是 pair 构造函数的参数。函数对象类型 Hash_pair 可以用来对 names 容器中的元素进行哈希,可以按如下方式定义它:
class Hash_pair
{
public:
    size_t operator()(const std::pair<String,String>& pr)
    {
        return std::hash<String>()(PR.first + PR.second);
    }
};
这里使用了一个定义在 String 头文件中的 hash<String> 函数对象的实例。它会哈希一个由 pair 对象的第一个成员和第二个成员串联的字符串,然后将结果作为这个 pair 元素的哈希值返回。

大佬总结

以上是大佬教程为你收集整理的C++ unordered_set插入元素(insert插入元素)详解全部内容,希望文章能够帮你解决C++ unordered_set插入元素(insert插入元素)详解所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: