linux c++ find函数,Linux c++库boost unordered_map数据插入及查找代码举例

linux c++库boost中unordered_map是基于hash的无序集合,每一个元素包括是由成对的key和value组成。如何插入数据及实现unordered_map的快速查找呢?插入数据使用 insert方法,查找则使用find方法,find方法返回unordered_map的iterator,如果返回为end()表示未查找到,否则表示查找到。boost::unordered_map是计算元素的hash值,根据hash值判断元素是否相同。所以,对unordered_map进行遍历,结果是无序的。

boost库中unordered_map定义如下:template <

class Key, class Mapped,

class Hash = boost::hash,

class Pred = std::equal_to,

class Alloc = std::allocator >

class unordered_map;

下面的代码给出了一个示例:#include "stdio.h"

#include

#include

#include

#include

#include

#include

using namespace std;

using namespace boost;

// g++ -o test_unordered_map test_unordered_map.cpp -std=c++0x

int main(int argc,char *argv[])

{

unordered_map mymap;

unordered_map::iterator it;

for(int i=0;i<100;i++)

{

try

{

mymap[lexical_cast(i)]=i;

}

catch(bad_lexical_cast &)

{

printf("lexical_cast(i) error!");

}

}

for(int i=90;i<110;i++)

{

try

{

it=mymap.find(lexical_cast(i));

printf("%drn",(it==mymap.end()));

}

catch(bad_lexical_cast &)

{

printf("lexical_cast(i) error!");

}

}

return 0;

}

再附加一段来自网上的示例代码供参考:#include

#include

#include

using namespace std;

struct person

{

string name;

int age;

person(string name, int age)

{

this->name = name;

this->age = age;

}

bool operator== (const person& p) const

{

return name==p.name && age==p.age;

}

};

size_t hash_value(const person& p)

{

size_t seed = 0;

boost::hash_combine(seed, boost::hash_value(p.name));

boost::hash_combine(seed, boost::hash_value(p.age));

return seed;

}

int main()

{

typedef boost::unordered_map umap;

umap m;

person p1("Tom1",20);

person p2("Tom2",22);

person p3("Tom3",22);

person p4("Tom4",23);

person p5("Tom5",24);

m.insert(umap::value_type(p3, 100));

m.insert(umap::value_type(p4, 100));

m.insert(umap::value_type(p5, 100));

m.insert(umap::value_type(p1, 100));

m.insert(umap::value_type(p2, 100));

for(umap::iterator iter = m.begin(); iter != m.end(); iter++)

{

cout<first.name<first.age<

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值