如何仅使用对中的第一个元素来查找集合中的对?

问题描述 投票:0回答:3

您好,我有一组包含以下元素的对。

set < pair<int,int> >st;
st.insert(make_pair(1,2));
st.insert(make_pair(4,5));
st.insert(make_pair(7,8));

现在我想根据该对的第一个元素从集合中删除该对 使用

set.erase()
。?

In - {(1,2),(4,5),{7,8}}
To achieve -  set.erase({1}).
out- {(4,5),(7,8)} // removing member of set using first element of pair.

请帮助实现这一目标。提前致谢 !!!

c++ set
3个回答
5
投票

如果要使用

erase
方法删除元素,则需要获取迭代器到已删除的位置,使用带有谓词的
find_if
算法来查找元素,并将该迭代器传递给
erase
方法。

    auto it = std::find_if(st.begin(), st.end(), [](const pair<int,int>& p ){ return p.first == 1; });
    if (it != st.end())
        st.erase(it);

4
投票

std::map
非常适合您的需求。
erase
上有按键方法
map

但是如果您确实需要使用

set
,请使用标准算法查找元素,然后使用
erase
算法返回的迭代器在集合上使用
find_if


0
投票

如果你想使用

erase
方法删除一个元素,你需要让迭代器到达删除的位置。使用
find_if
算法总是会花费您
O(n)
,而使用
lower_bound
则平均花费
O(log(n))

auto it = st.lower_bound({1, INT_MIN});
while (it != st.end()) {
    if ((*it).first == 1) {
        it = st.erase(it);
    } else {
        break;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.