`
tulunta
  • 浏览: 378987 次
文章分类
社区版块
存档分类
最新评论

multimap equal_range函数的使用方法

 
阅读更多

#include <iostream>
#include <string>
#include <map>
using namespace std;

struct userdevice{
string m_devicename;
string m_deviceid;
int m_devicePopedom;

};
typedef multimap<string,userdevice> USERTABLE;
typedef USERTABLE::const_iterator CIT;
typedef pair<CIT, CIT> Range;
int _tmain(int argc, _TCHAR* argv[])
{
CIT it;
userdevice d1,d2,d3,d4;
d1.m_deviceid = "12341234";
d1.m_devicename = "d1";
d1.m_devicePopedom = 123;

d2.m_deviceid = "23622344";
d2.m_devicename = "d2";
d2.m_devicePopedom = 234;


d3.m_deviceid = "3451234";
d3.m_devicename = "d3";
d3.m_devicePopedom = 345;

d4.m_deviceid = "43622344";
d4.m_devicename = "d4";
d4.m_devicePopedom = 456;

USERTABLE m_user;
m_user.insert(make_pair("zhangsanfeng",d1));
m_user.insert(make_pair("zhangsanfeng",d2));

m_user.insert(make_pair("zhangsanfeng2",d3));
m_user.insert(make_pair("zhangsanfeng2",d4));
//查找方法一
Range range=m_user.equal_range("zhangsanfeng");
for(CIT i = range.first;i!=range.second;i++)
{
cout << i->second.m_deviceid<<','
<< i->second.m_devicename<<','
<<i->second.m_devicePopedom
<< endl;
}
cout<<endl;
//查找方法二
CIT it2 = m_user.find("zhangsanfeng2");
while(it2 != m_user.end())
{
cout<<it2->second.m_deviceid<<','
<<it2->second.m_devicename<<','
<<it2->second.m_devicePopedom<<','
<<endl;
it2++;
}
cout<<endl;
//遍历
CIT it3 = m_user.begin();
while(it3 != m_user.end())
{
cout<<it3->second.m_deviceid<<','
<<it3->second.m_devicename<<','
<<it3->second.m_devicePopedom<<','
<<endl;
it3++;
}
cin.get();
return 0;
}

lower_bound() 和 upper_bound():lower_bound(k) 查找第一个与键 k 关联的值,而 upper_bound(k) 是查找第一个键值比 k 大的元素。下面的例子示范用 upper_bound()来定位第一个其键值大于“213.108.96.7”的元素。通常,当键是一个字符串时,会有一个词典编纂比较:

dns.insert(make_pair("219.108.96.70", "pythonzone.com"));
CIT cit=dns.upper_bound("213.108.96.7");
if (cit!=dns.end()) //found anything?
cout<<cit->second<<endl; //display: pythonzone.com

如果你想显示其后所有的值,可以用下面这样的循环:

// 插入有相同键的多个值
dns.insert(make_pair("219.108.96.70","pythonzone.com"));
dns.insert(make_pair("219.108.96.70","python-zone.com"));

// 获得第一个值的迭代指针
CIT cit=dns.upper_bound("213.108.96.7");

// 输出: pythonzone.com,python-zone.com
while(cit!=dns.end())
{
   cout<<cit->second<<endl;
   ++cit;
}
分享到:
评论

相关推荐

    STL容器multimap的使用

    - `equal_range`:返回指定键值的迭代器对,表示一个区间,包含所有与键相等的元素。 4. **修改元素**: - 通过迭代器可以修改键值对的值,但不能直接修改键,因为键通常是不可变的。 - 若要改变键,需要先删除...

    好友列表(multimap实现)

    auto user2Buddies = buddyList.equal_range(User(2, "")); for (const auto& pair : user2Buddies) { std::cout ; } ``` 要删除特定键值对,可以使用`erase`函数,传入相应的键值对迭代器: ```cpp // 假设要...

    C++STL实验报告-迭代器和非变异算法

    在实验7-29中,我们使用了`equal_range`来查找指定值的所有实例,同时展示了`count`函数用于计算特定元素的数量。在set和multiset中,`equal_range`返回一个范围,包含了所有等于给定值的元素的迭代器对。 接下来,...

    传智播客扫地僧视频讲义源码

    08_C动态库升级成框架案例_方法1动态库中直接添加回调函数_传智扫地僧 09_C动态库升级成框架案例_方法2把回调函数缓存到动态库_编写 10_C动态库升级成框架案例_方法2把回调函数混存到动态库_测试 11_C++基础课程day...

    multimap实现tlv

    2. **查找**:根据标签查找特定的TLV,可以使用`tlv_multimap.equal_range(tag)`,这会返回一个迭代器范围,包含所有具有该标签的TLV。 3. **更新**:由于`std::multimap`允许重复键,可以替换已存在的TLV,或者使用...

    cpp代码-Multimap 案例

    本案例将深入探讨`Multimap`的使用方法,包括其基本操作、插入、查找、删除等。 首先,`Multimap`的定义和初始化如下: ```cpp #include using namespace std; multimap, int&gt; myMultimap; ``` 这里我们创建了一...

    map/multimap属于**关联式容器**,底层结构是用二叉树实现

    同样,`multimap`内部也是按照键的顺序排列,可以使用`lower_bound`和`upper_bound`方法找到特定键的范围,或者使用`equal_range`获取键的所有匹配项。 **红黑树**: 红黑树是一种自平衡二叉查找树,它在保持查找...

    STL自定义排序准则

    首先,我们将account_range中的值存储到一个vector中,然后使用sort函数按照Account-&gt;money的值来排序。 ```cpp std::vector*&gt; account_vec; for (AMap::iterator it = account_range.first; it != account_range....

    算法题常用STL_STL_

    - **查找算法**:如`find`、`find_if`、`lower_bound`、`upper_bound`和`equal_range`等。 - **迭代器操作**:如`advance`、`distance`和`next_permutation`等。 - **集合操作**:`set_union`、`set_intersection...

    typedef用法小结

    pair, itType&gt; pos = authors.equal_range(searchItem); ``` 这里通过使用`typedef`,可以定义一个新的类型名来简化上述定义: ```c++ typedef multimap, string&gt;::iterator ItType; pair, ItType&gt; pos = authors....

    STL编程指南(Programmer's Guide)

    - **比较函数对象**:less、greater、equal_to、not_equal_to等。 - **谓词函数对象**:如bind1st、bind2nd、ptr_fun、mem_fun等,用于绑定参数或转换成员函数为普通函数。 - **适配器函数对象**:如unary_negate、...

    6_标准模板库(2)讲义1

    4. `equal_range`: 这个函数返回一个迭代器对,分别指向给定值的下界和上界,可以一次性找到所有等于给定值的元素范围。 5. `count`: 用于计算容器内等于给定值的元素个数。 6. `insert`: 可以插入单个元素或一个...

    STL源码剖析.pdg

    6.7.10 equal_range(应用于有序区间) 400 6.7.11 inplace_merge(应用于有序区间) 403 6.7.12 nth_element 409 6.7.13 merge sort 411 第7章 仿函数(functor,另名 函数对象function objects) 413 7.1 仿...

    C++STL容器.md

    - `lower_bound()`、`upper_bound()`、`equal_range()`:与`set`相同。 ##### 7. Multimap 容器 - **定义**:`multimap`与`map`相似,但允许相同的键对应多个值。 - **特点**: - 支持相同的查找、插入和删除...

    STL:本例程提供了C++的STL常用数据结构及其算法的使用范例,比如vector、string、list、forward_list、deque、queue、stack、map、set、multimap、multiset、tuple、bitset的使用范例,以及algorithm常用的find、sort、copy、replace、count、accumulate......等泛型算法的使用范例。为面试笔试编程题提供便利

    - 更多算法,如`equal_range`、`lower_bound`、`upper_bound`、`binary_search`、`transform`等,用于查找、比较、转换等操作。 4. 函数对象(functors): - 也称为仿函数,是具有函数调用操作符的对象,常用于...

    C++ STL 开发技术导引(第6章)

    23.16 等价区间equal_range 390 23.17 折半搜索binary_search 392 23.18 子集合includes 393 23.19 集合求并set_union 394 23.20 集合求交set_ intersection 396 23.21 集合求差set_difference 398 ...

    C++ STL开发技术导引(第5章)

    23.16 等价区间equal_range 390 23.17 折半搜索binary_search 392 23.18 子集合includes 393 23.19 集合求并set_union 394 23.20 集合求交set_ intersection 396 23.21 集合求差set_difference 398 ...

    C++ STL开发技术导引(第3章)

    23.16 等价区间equal_range 390 23.17 折半搜索binary_search 392 23.18 子集合includes 393 23.19 集合求并set_union 394 23.20 集合求交set_ intersection 396 23.21 集合求差set_difference 398 ...

    P231~236C++map学习笔记.docx

    * `equal_range()` 返回给定键值的元素范围。 * `at()` 安全访问元素,如果键不存在会抛出异常。 综上所述,C++中的map是一个关联容器,用于存储键值对,并根据键值自动排序。它提供了多种构造、赋值、插入、删除...

    STL标准模板库的例子

    auto range = mm.equal_range(1); // 查找键为1的所有元素 for (auto it = range.first; it != range.second; ++it) { std::cout &lt;&lt; it-&gt;second ; // 输出值 } ``` - **`set`**:只存储键,键必须唯一。 - **...

Global site tag (gtag.js) - Google Analytics