C++ pair用法
摘自:http://hi.baidu.com/lucene1983/blog/item/83bb68351d12ffbed1a2d3fe.html
1 pair的应用
pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
2 make_pair函数
template pair make_pair(T1 a, T2 b) { return pair(a, b); }
很明显,我们可以使用pair的构造函数也可以使用make_pair来生成我们需要的pair。 一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象很方便,代码也很清晰。 另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。灵活度也带来了一些问题如:
std::pair<int, float>(1, 1.1);
std::make_pair(1, 1.1);
是不同的,第一个就是float,而第2个会自己匹配成double。
以上是从网上找来的资料,我又查了一下关于pair的定义,其定义是一个模板结构。
// TEMPLATE STRUCT pair
template<class _Ty1,
class _Ty2> struct pair
{
// store a pair of values
typedef pair<_Ty1, _Ty2> _Myt;
typedef _Ty1 first_type;
typedef _Ty2 second_type;
pair()
: first(_Ty1()), second(_Ty2())
{ // construct from defaults
}
pair(const _Ty1& _Val1, const _Ty2& _Val2)
: first(_Val1), second(_Val2)
{ // construct from specified values
}
template<class _Other1,
class _Other2>
pair(const pair<_Other1, _Other2>& _Right)
: first(_Right.first), second(_Right.second)
{ // construct from compatible pair
}
void swap(_Myt& _Right)
{ // exchange contents with _Right
std::swap(first, _Right.first);
std::swap(second, _Right.second);
}
_Ty1 first; // the first stored value
_Ty2 second; // the second stored value
};
//make_pair同样也是一个模板函数。其定义如下:
template<class _Ty1,
class _Ty2> inline
pair<_Ty1, _Ty2> make_pair(_Ty1 _Val1, _Ty2 _Val2)
{ // return pair composed from arguments
return (pair<_Ty1, _Ty2>(_Val1, _Val2));
}
分享到:
相关推荐
C++中的`std::pair`是一个非常实用的工具,它允许我们将两个不同类型的数据组合成一个单一的实体。这个工具在很多场景下都非常有用,比如在STL中的`std::map`,它用`pair`来存储键值对,或者在一个函数需要返回两个...
C++ pair的用法实例详解 C++ 中的 pair 是一个非常重要的概念,它可以将两个数据组合成一个数据,方便我们在编程时的使用。下面我们将详细介绍 C++ pair 的用法实例详解。 pair 的定义 pair 是一个结构体,它有两...
本文将深入探讨 `std::pair` 的使用方法,并通过实例来加深理解。 **一、Pair类型概述** `std::pair` 是一个模板类,用于封装两个不同类型的数据。它的基本定义形式为 `pair<类型1, 类型2>`,其中 `类型1` 和 `...
### C++ STL之set容器使用方法 #### 一、引言 在C++标准模板库(STL)中,`set`容器是一种非常重要的关联容器,主要用于存储唯一元素,并且这些元素会根据其键值自动排序。`set`内部通常采用红黑树(一种自平衡的二叉...
在本示例中,“C++map使用小例子”提供了关于如何在C++程序中使用`std::map`的基本操作和应用。 `std::map`的主要特点和操作包括: 1. **插入元素**:可以使用`insert`函数或直接使用下标运算符`[]`来插入键值对。...
`,还可以使用`make_pair`简化写法:`my_Map.insert(make_pair, int>("key", 4));` 4. **查找和修改数据** - 直接通过索引访问并修改:`int i = my_Map[1]; my_Map[1] = i;` - 使用迭代器查找并修改:`MY_MAP::...
在C++编程中,`hashmap`通常指的是`std::...通过熟练掌握其用法,可以编写出更高效的C++代码。在`C++Test`文件中,你可以找到更多关于`std::unordered_map`的实践例子,这些例子可以帮助你更好地理解和应用这些知识点。
在“c++用法总结11111”这个主题中,我们可以深入探讨C++的关键特性、语法、类与对象、模板、异常处理、STL库等重要知识点。 1. **基础语法**: - 变量声明:C++中的变量必须先声明后使用,可以指定数据类型,如...
为了便于读者学习,本书采用了清晰的结构,详细讲解了每个新特性的使用方法、背后的动机和可能的应用场景。书中还包含了大量的示例代码,帮助读者更好地理解并实践这些新特性。同时,作者鼓励读者在遇到问题时积极...
本文详细介绍了C++ `map`容器的基础使用方法以及一些高级特性,包括构造函数、添加数据、查找和删除元素等基本操作,同时还讨论了如何使用自定义比较器、统计元素数量等高级功能。掌握了这些技巧后,开发者可以更...
《C++标准库》这本书不仅全面覆盖了C++标准库的知识体系,还提供了丰富的实践案例,非常适合有一定C++基础的学习者作为参考书使用。通过对本书的学习,读者不仅可以掌握标准库的基本用法,还能深入了解其背后的原理...
2. 使用insert方法:`m2.insert({"abc", 1});` 3. 列表初始化:`map, int> m3 = {{"string", 1}, {"sec", 2}, {"trd", 3}};` 对于map的使用,还可以利用重载的`[]`操作符来插入或访问元素,如`a["new"]`。如果键不...
2. **便利函数make_pair()**:为了方便创建`std::pair`对象,C++标准库提供了`make_pair()`函数。该函数接受两个参数,分别对应于`std::pair`的两个元素,并返回一个构造好的`std::pair`对象。这种方式简化了`std::...
这是一种用来衡量算法时间或空间复杂度的方法,对于选择合适的算法非常关键。 ### 三、通用概念 #### 3.1 名称空间std 名称空间`std`是C++标准库中的核心组成部分,它定义了几乎所有标准库中的元素。使用名称空间...
STL手册通常会详细阐述这些组件的使用方法,提供实例代码,帮助开发者快速理解和应用。 1. **容器** - **Vector**: 动态数组,支持随机访问,提供快速的元素插入和删除操作。 - **List**: 双向链表,适用于频繁...
通过RTTR,我们可以获取类的成员变量、方法、构造函数和属性,甚至可以创建和销毁对象实例,这对于实现序列化和反序列化非常有用,特别是将C++的对象转换为JSON格式。 JSON(JavaScript Object Notation)是一种轻...
在本文中,我们将深入探讨`map`的基本概念、特性、操作以及实际应用,帮助你全面掌握C++ `map`的用法。 ### 1. `map`的定义与类型 `map`是C++标准库中`<map>`头文件的一部分,它是一个红黑树(Red-Black Tree)...