悠悠楠杉
网站页面
正文:
在C++标准模板库(STL)中,pair是一个简单但功能强大的模板类,用于将两个值组合成一个单元。这种键值对结构在需要关联两个数据的场景中非常实用,例如存储坐标、键值映射或返回多个值的函数。
pair定义在<utility>头文件中,其模板声明如下:cpp
template <class T1, class T2>
struct pair;
可以通过多种方式初始化一个pair对象:
// 直接初始化
std::pair<int, std::string> p1(42, "Hello");
// 使用make_pair函数
auto p2 = std::make_pair(3.14, "PI");
// C++11后的统一初始化
std::pair<int, char> p3{10, 'A'};通过first和second成员变量访问pair的两个值:
std::pair<int, std::string> p(100, "C++");
std::cout << p.first << ", " << p.second; // 输出: 100, C++pair支持比较运算符(如==、<),按字典序比较:先比较first,再比较second。
std::pair<int, int> a(1, 2);
std::pair<int, int> b(1, 3);
if (a < b) { // true,因为a.second < b.second
std::cout << "a is less than b";
}C++17引入的结构化绑定可以简化pair的访问:
auto [num, str] = std::make_pair(42, "Answer");
std::cout << num << ", " << str; // 输出: 42, Answer当函数需要返回两个相关值时,pair比定义结构体更便捷:
std::pair<bool, std::string> checkLogin() {
if (login_success) {
return {true, "Welcome!"};
}
return {false, "Invalid credentials"};
}pair是map和unordered_map的底层存储单元:
std::map<int, std::string> m;
m.insert(std::make_pair(1, "Apple"));
m.emplace(2, "Banana"); // 更高效的插入方式结合vector和sort,可以按特定规则排序:
std::vector<std::pair<int, std::string>> items = {{3, "Pear"}, {1, "Apple"}};
std::sort(items.begin(), items.end()); // 按int升序排列pair可以嵌套使用,处理更复杂的数据关联:
std::pair<int, std::pair<float, std::string>> nested =
{1, {3.14f, "Nested"}};此外,C++11的tuple可以替代多元素的pair,但pair在简单场景中更高效。
pair是C++中轻量且灵活的键值对工具,适用于函数返回值、容器元素和临时数据组合。通过结合STL算法和现代C++特性(如结构化绑定),它能显著提升代码的简洁性和可读性。