所在位置:首页 → 编程语言 → C++ → c++ pair用法详解

c++ pair用法详解

发布: 更新时间:2022-04-25 20:56:44

今天在刷力扣时,遇到一道题:

原题链接:https://leetcode-cn.com/problems/first-unique-character-in-a-string/

我是想着用队列的方式去解决。但是没有想到还有pair这个函数。可以往队列里面同时放两个参数。见识少了。。这里记录一下pair的用法!

pair定义

pair是一种简单的模板类型,其中包含两个数据值,类似map的键值对,两个数据的类型可以不同。

pair初始化

1. pari<T1 , T2> p1  //创建一个空的pair对象,它的两个元素分别是T1 和T2类型,采用直初始化
2. pair<T1, T2> P1(V1 , V2)   //创建一个pair对象,它的两个元素分别是T1 和T2类型,其中first成员初始化为v1,而second 成员初始化为v2 
3. make_pair(v1 , v2)  //以v1和v2值创建一个新的pair对象,其元素类型分别是T1 和T2类型

pair属性

p.first 和 p.second

对应map的key,value。

定义多个形同pair类型 ,简化声明

typedef pair<string, string> author;

author pro("May", "Lily");

author joye("James", "Joyce");

实例用法

上题利用队列和pair解答方法:

class Solution {
public:
    int firstUniqChar(string s) {
        unordered_map<char, int> position;
        queue<pair<char, int>> q;
        int n = s.size();
        for (int i = 0; i < n; ++i) {
            if (!position.count(s[i])) {
                position[s[i]] = i;
                q.emplace(s[i], i);
            }
            else {
                position[s[i]] = -1;
                while (!q.empty() && position[q.front().first] == -1) {
                    q.pop();
                }
            }
        }
        return q.empty() ? -1 : q.front().second;
    }
};
标签:, ,
文章排行