首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在std::set上查找不区分大小写

,可以通过自定义比较函数来实现。以下是一个完善且全面的答案:

在C++中,std::set是一个有序的容器,它存储唯一的元素,并且按照特定的排序准则进行排序。默认情况下,std::set使用std::less作为比较函数,这意味着它对元素进行区分大小写的比较。

如果我们想要在std::set上进行不区分大小写的查找,我们可以自定义一个比较函数,将所有的元素转换为统一的大小写形式,然后进行比较。以下是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <set>
#include <algorithm>
#include <cctype>

struct CaseInsensitiveCompare {
    bool operator()(const std::string& str1, const std::string& str2) const {
        std::string str1Lower = str1;
        std::string str2Lower = str2;
        std::transform(str1Lower.begin(), str1Lower.end(), str1Lower.begin(), ::tolower);
        std::transform(str2Lower.begin(), str2Lower.end(), str2Lower.begin(), ::tolower);
        return str1Lower < str2Lower;
    }
};

int main() {
    std::set<std::string, CaseInsensitiveCompare> mySet;
    mySet.insert("apple");
    mySet.insert("Banana");
    mySet.insert("CHERRY");

    std::string searchKey = "banana";
    auto it = mySet.find(searchKey);
    if (it != mySet.end()) {
        std::cout << "Element found: " << *it << std::endl;
    } else {
        std::cout << "Element not found." << std::endl;
    }

    return 0;
}

在上述代码中,我们定义了一个名为CaseInsensitiveCompare的比较函数对象,它将两个字符串转换为小写形式,然后进行比较。我们将这个比较函数对象作为std::set的第二个模板参数,以实现不区分大小写的查找。

在主函数中,我们创建了一个std::set对象mySet,并插入了三个元素:"apple"、"Banana"和"CHERRY"。然后,我们定义了一个搜索关键字"banana",并使用find函数在mySet中查找该关键字。由于我们使用了不区分大小写的比较函数,所以即使搜索关键字的大小写与元素不完全匹配,也能找到对应的元素。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,这里无法给出具体的推荐。但是,腾讯云作为一家知名的云计算品牌商,提供了丰富的云计算服务,包括云服务器、云数据库、云存储等。您可以访问腾讯云官方网站,了解更多关于腾讯云的产品和服务信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】STL 算法 ⑦ ( 二元谓词使用场景 - 大小写不敏感 set 集合 | tolower 函数 - 将字符转为小写字母 | 基于 tolower 实现大小写不敏感的比较函数对象 )

实现大小写不敏感的比较函数对象 二、代码示例 - 二元谓词使用场景 1、普通的 set 集合查找元素 - 大小写匹配查找成功 2、普通的 set 集合查找元素 - 大小写匹配查找失败 3、设置二元谓词规则的...set 集合查找元素 - 大小写不敏感集合 一、二元谓词使用场景 - 大小写不敏感 set 集合 1、需求分析 本篇博客中 , 实现一个 set 集合 , 存放 英文字母 组成的字符串 , 且 大小写不敏感...集合查找元素 - 大小写匹配查找失败 创建普通的 set 集合 , 并插入三个元素 ; // 创建一个 set 集合容器 set mySet; // 向容器中插入元素 mySet.insert...集合查找元素 - 大小写不敏感集合 在下面的代码中 , 创建 set 集合时 , 指定了 集合元素的 排序规则 : // 创建一个 set 集合容器 set mySet..., 大小写字母不敏感 , 即使是大写字母 " A " , 也会当做 " a " 进行排序 ; 查找元素时 , 查找 " A " 字符串 , 实际查找的是 " a " 字符串 ; 使用 find 函数

15410
  • boost::algorithm(字符串算法库)

    :ends_with("ing");//判断字符串是否以另一个字符串结尾; // boost::iends_with()同上只是区分大小写 all()判断字符串中的所有字符是否全部满足这个谓词...2 ifind_first() 从头查找字符串中的子字符串,返回这个子串原串中的iterator_range迭代器(区分大小写) 3 find_last() 从尾查找字符串中的子字符串,返回这个子串原串中的...iterator_range迭代器 4 ifind_last() 从尾查找字符串中的子字符串,返回这个子串原串中的iterator_range迭代器(区分大小写) 5 find_nth() 找到第...,并且赋 值给另一个字符串(区分大小写) 5 erase_first()   从头找到第一个匹配的字符串,将其删除  Example:  string str1("hello world!")...7 ierase_first()  从头找到第一个匹配的字符串,将其删除(区分大小写) 8 ierase_first_copy() 从头找到第一个匹配的字符串,将其删除,并且赋值给另一个字符串(区分

    2.3K20

    C++中map和set的使用

    注意: set查找某个元素,时间复杂度为: log_2 n ,因为底层是红黑树。...find (const value_type& val) const; 查找元素 ,返回该元素的迭代器 size_type count (const value_type& val) const; 返回目标元素...(it); } } return ret; } }; 单词识别 (2)关于map的使用 题目描述: 输入一个英文句子,把句子中的单词(区分大小写...)按出现次数按从多到少把单词和次数屏幕输出来,次数一样的按照单词小写的字典序排序输出,要求能识别英文单词和句号。...由于区分大小写,可以先将字符串中所有的字母转化为小写。 将字符串按照空格划分,划分为一个个单词word。 将单词存入map,没出现一次单词,该单词的次数就+1; 最后按迭代器跑一遍即可。

    25310

    一个简单的支持MySQL和SQLite3的DB接口

    DBConnection { public: /*** * 工厂方法 - 创建一个DB连接 * @db_type_name DB类型名,如:mysql、oracle、postgreSQL,区别大小写...* 当前只支持MySQL和SQLite3,也就是参数值只能输入mysql(区别大小写) * @sql_max 支持的最大SQL语句长度,单位为字节数,不含结尾符 * 如果是支持的DB...*/     virtual void set_user(const std::string& db_user, const std::string& db_password) = 0...(const std::string& charset) = 0; /*** * 设置为连接断开后自动重连接,如果主动设置,默认不自动重连接 * 注意,只有open()或reopen...) = 0; /*** * 设置空值,字段DB表中的值为NULL时,返回的内容 * 如果主动设置,则默认空值时被设置为"$NULL$"。

    73520

    第三章 —- 了解各种 Linux 文本编辑器

    光标所在的航模插入文本 i:光标上一个字符之前插入文本 I:光标的行首插入文本 o:光标所在的行下插入一行文本 O:光标所在的行插入一行文本 r:修改当前光标所在的字符 R:替换文本...:向上搜索 命令 操作 / 搜索整个单词 n 搜索下一个出现的位置 N 搜索上一个出现的位置 搜索时,默认是区分大小写的, :set ic:区分大小写 :set noic:关闭区分大小写...(开启区分大小写) 样式查找指令 命令 操作 fx 在当前行的当前光标位置后查找字符 x Fx 在当前行的当前光标位置前查找字符 x /pattern + Enter 查找包含的给定样式的下一行 ?...pattern + Enter 查找包含的给定样式的一行 配置 Vi、 set map ab set 命令 vi 编辑器的环境是通过其变量设置俩定义的。...命令 功能 :set nu 显示行号 :set ic 关闭区分大小写功能(默认是区分大小写) map 命令 map 命名的语法是: :map ab 命令

    2.4K30

    mysql linux环境下表名区分大小写问题

    linux环境下表名是区分大小写的 问题 执行SHOW VARIABLES LIKE '%lowercasetable_names%' 输出结果: ?...其中 0:区分大小写,1:区分大小写 解决办法 mysql的配置文件中添加 lowercasetable_names=1 实际解决方式 先查找mysql使用的配置文件 添加配置 重启mysql 查看是否生效...查找mysql配置文件 locate my.cnf 没有找到 [root@iZblz0hZ mysql]# locate my.cnf -bash: locate: command not found...于是,/etc目录下新建my.cnf文件,文件中的内容为: [mysqld] character_set_server=utf8 init_connect='SET NAMES utf8' basedir...sql语句是否严格),默认库名表名保存为小写, 区分大小写 lower_case_table_names=1 # 开启ip绑定 #bind-address = 0.0.0.0 [mysqld_safe

    2.4K20

    反片语 set+哈希表 就C++代码而言,我很短

    判断是否满足条件时,字母不分大小写,但在输入时应保留输入中的大小写,按字典序进行排列(所有大写字母小写字母的前面)。...字典将包含超过1000个单词。 输入 Input will consist of a series of lines....空格可以自由出现在单词周围,并且至少有一个空格将同一行的多个单词分开。请注意,包含相同字母但大小写不同的单词被认为是彼此的字谜,因此“tIeD”和“EdiT”是字谜。输入以 # 结束。...单词必须按词典(区分大小写)顺序输出。始终至少有一个相对分析图。...可以把我代码里面所有unordered_map直接换成map,照样可以运行出正确结果,但只是功能差不多一样,map是有序的,内部是一个严格的红黑树,而unordered_map内部是个哈希表,是无序的,查找元素

    16740

    vim学习六之搜索命令「建议收藏」

    搜索 n/N 正反向下一个 光标处单词搜索 Vim高亮搜索 搜索大小写敏感 搜索进阶 Vim正则表达式搜索 查找在行首的特定串 查找在行尾的特定串 匹配特定行 Vim基本搜索命令 / 或者?...Vim高亮搜索 为了Vim中高亮显示被搜索的字符,可以使用命令 :set hlsearch,可以Vim命令行模式执行命令或者配置文件 .vimrc 中进行永久设置。...搜索大小写敏感 默认Vim搜索命令是大小写敏感的,因此,搜索 the 不会查找到 The。使用命令 :set ignorecase 会使得Vim搜索变得不区分大小写。...可以搜索命令中使用 \c 来强制使得当前搜索模式区分大小写, 而命令 \C 则会强制当前搜索模式大小写敏感。...因此,/the\c 既会查找 the,也会查找到 THE 或者 The 等等。 搜索进阶 搜索命令前还可以增加一个整数,用于表示搜索目标出现的位置。

    10.5K51

    Linux Vi编辑器和find命令的使用

    #号行首 +:打开文件后最后一行 光标移动: 单字符移动: h:左 l:右 j:下 k: 可以和数字组合 单词间移动: w:调至下一个单词的词首 b:当前或前一个的词首 e:...当前或下一个词的词尾 行内移动: 0:绝对行首 ^:第一个非空白字符 $:绝对行尾 句子间移动: ):一句 (: 下一句 段落间移动: }:一段 {:下一段 行间移动: #G...设置制表符宽度为4 :set ic 查找时不考虑大小写 :set noic 查找时考虑大小写 显示对应的括号 :set sm (show match) :set nosm 语法高亮: :syntax...s/查找模式/替换为的内容/gi g:全局替换 i:区分大小写 :地址定界s@查找模式@替换为的内容@gi &:用于替换为的内容部分中引用前面匹配到的所有内容 find: 实时查找工具,通过遍历指定路径下的文件系统完成文件查找...,[],[^]) 例如 find /etc -name "passwd*" -iname "文件名称" (区分大小写) -regex "PATTEN": 以PATTEN

    3.9K20

    mysql大小写敏感与校对规则

    mysql中控制数据库名和表名的大小写敏感由参数lower_case_table_names控制,为0时表示区分大小写,为1时,表示将名字转化为小写后存储,区分大小写。...1:表名硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写在存储和查找。该行为也适合数据库名和表的别名。该值为Windows的默认值。...2:表名和数据库名硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找。...为了避免大小写引发的问题,一种推荐的命名规则是:定义数据库、表、列的时候全部采用小写字母加下划线的方式,不使用任何大写字母。 字段名和字段值: 字段名通常都是区分大小写的。...比如 utf8字符集,utf8_general_ci,表示区分大小写,这个是utf8字符集默认的校对规则;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写

    5.1K10

    日常记录(1)

    是一个字符,-type 类型, grep 匹配字符串 文件列表, -r递归,-i区分大小写,,文件内的字符串查找 sort排序,-r反向排序 diff 源文件,目标文件,b忽略空格,-i忽略大小写,...String向前搜索, X文件加密,-x打开加密文件 ab(插入替换)ab addr address set wrap分行显示,nowrap不分行显示,ic区分大小写,noic区分大小写 U替换为大写单词...,u为小写单词,ctrl+v多选 sp横屏(ctrl ws),vsp竖屏(ctrl wv),ctrl+w切换,e刷新,E/进入一层目录(ctrl d) vistual块操作,的I新增,r替换 ctrl...git pull = git fetch + git merge git pull --rebase = git fetch + git rebase rebase : 先把E rebase到D,然后D...的base添加修改,再以新的R作为修改。

    94610

    跨平台编译工具-CMake的语法特性与常用变量

    概述 Cmake (Cross Platform Make) 是一个跨平台的编译工具,可以用简单的语句来描述跨平台的编译过程 CMake已经成为了大部分C++开源项目的首要编译工具 不同的操作系统,...cmake的指令区分大小写,但是参数严格区分大小写,如下示例 set(HELLO hello.cpp) add_executable(hello main.cpp hello.cpp) ADD_EXECUTABLE...添加src子目录,src中需要有一个 CMakeLists.txt add_subdirectory(src) aux_source_directory : 发现一个目录下所有的源代码文件并将列表存储一个变量中...Cmake 常用变量 CMAKE_FLAGS : gcc 编译选项 CMAKE_CXX_FLAGS : g++ 编译选项 # CMAKE_CXX_FLAGS 编译选项后追加 -std=c++11 set...,调试时需要选择 debug set(CMAKE_BUILD_TYPE Debug) # 设定编译类型为release,发布时需要选择 release set(CMAKE_BUILD_TYPE Release

    1.2K10

    关于MySQL库表名大小写问题

    默认情况下,库表名 Windows 系统下是区分大小写的,而在 Linux 系统下是区分大小写的。列名,索引名,存储过程、函数及事件名称在任何操作系统下都不区分大小写,列别名也区分大小写。...下面再来看下各个值的具体含义: Value Meaning 0 库表名以创建语句中指定的字母大小写存储磁盘上,名称比较区分大小写。 1 库表名以小写形式存储磁盘上,名称比较区分大小写。...MySQL 存储和查找时将所有表名转换为小写。此行为也适用于数据库名称和表别名。 2 库表名以创建语句中指定的字母大小写存储磁盘上,但是 MySQL 查找时将它们转换为小写。...名称比较区分大小写。 一般很少将 lower_case_table_names 参数设置为 2 ,下面仅讨论设为 0 或 1 的情况。...,而且表别名同样区分大小写但列名区分大小写,查询时也需要严格按照大小写来书写。

    7.5K32
    领券