stl中hash_set的使用

本文介绍了如何在C++中利用自定义比较器eqstr实现hash_set对字符串的有效管理,避免了默认比较器的不适用,并通过实例展示了查找操作的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在hash_set中,元素不会被排序

下面这个例子中,hash_set的EqualKey必须有特别的设计,不能沿用equal_to,因为此例中的元素是c风格字串,而c风格字串必须使用strcmp来进行比较

下面是具体源码:

#include <hash_set>
#include <iostream>
#include <cstring>
using namespace std;


struct eqstr
{
	bool operator()(const char* s1, const char* s2) const
	{
		return strcmp(s1, s1) == 0;

	}
};


void lookup(const hash_set<const char*, hash<const char*>, eqstr>& Set, const char* word)
{
	hash_set<const char*, hash<const char*>, eqstr>::const_iterator it = Set.find(word);
	cout << " " << word << ": "
		<< (it != Set.end() ? "Present" : "not Present") << endl;

}


int main(){

	hash_set<const char*, hash<const char*>, eqstr> Set;
	Set.insert("kiwi");
	Set.insert("plum");
	Set.insert("apple");
	Set.insert("mango");
	Set.insert("apricot");
	Set.insert("banana");

	lookup(Set, "mango");
	lookup(Set, "apple");
	lookup(Set, "durian");

	hash_set<const char*, hash_set<const char*>, eqstr>::const_iterator ite1 = Set.begin();

	hash_set<const char*, hash_set<const char*>, eqstr>::const_iterator ite2 = Set.end();

	for (; ite1 != ite2; ++ite1)
	{
		cout << *ite1 << " ";
	}
	
}

最后的执行结构中显示hash_set中的元素并没有被排序,但这并不是一个良好的排序,因为即使排序也应该以元素型别const char*来作为排序对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值