首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::set<pair<int,int> >-仅使用pair<>::first作为关键字进行查找

std::set<pair<int,int> >-仅使用pair<>::first作为关键字进行查找
EN

Stack Overflow用户
提问于 2015-01-18 06:56:46
回答 2查看 4.2K关注 0票数 1

所以我有一棵红黑树包含成对的

,当我调用

它将搜索的函数

(第一个和第二个),但我想让它忽略第二个值,只查找第一个值。我怎么才能做到这一点呢?

EN

回答 2

Stack Overflow用户

发布于 2015-01-18 07:08:22

一般来说,这是不可能的。但对于你有限的一对

你可以用下面的命令来伪装它

代码语言:javascript
复制
#include 
#include 
#include 
#include 

int main()
{
    using key_type = std::pair;
    std::set s { {1, -1}, {1, 3}, {2, 10}, {3, 42} };
    auto it = s.upper_bound (key_type (2, std::numeric_limits::min ()));
    std::cout << "(" << it->first << "; " << it->second << ")\n";
}

在Coliru上直播

票数 3
EN

Stack Overflow用户

发布于 2021-03-02 12:07:46

代码语言:javascript
复制
auto fn = [](const pair&a, const pair &b) {
  return a.first < b.first;
};
set, decltype(fn)> my_set(fn);

我的

_

set现在是一个仅使用

作为关键

示例:

代码语言:javascript
复制
#include 
#include 
#include 

using namespace std;

int main()
{
    auto fn = [](const pair&a, const pair &b) {
      return a.first < b.first;
    };
    set, decltype(fn)> my_set(fn);
    
    my_set.insert({1, 123});
    my_set.insert({4, 456});
    my_set.insert({7, 789});
    
    auto iter = my_set.find({4, 0});
    if (iter != my_set.end()) {
      cout << "first: " << iter->first << ", second: " << iter->second << "\n";
    } else {
      cout << "not found\n";
    }

    return 0;
}

打印

代码语言:javascript
复制
first: 4, second: 456

改变

只是

然后它会打印出来

当然,仅启用键控

可以说是一个

那么为什么不干脆这么做呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28005248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档