find()的替代方法,用于确定unordered_set是否包含键

时间:2018-12-15 18:35:08

标签: c++ stl unordered-set

假设我有一个# load necessary packages ---- library(tidyverse) # load necessary data ------ df_specific <- tibble(terms = c("hi", "why here", "see you soon")) df_text <- tibble(text = c("hi my name is" , "why here you are" , "hi see you later" , "I hope to see you soon")) # perform analysis -------- df_specific %>% pull(terms) %>% set_names() %>% # for each value in df_text$text # count how many times .x appears in the vector map_df(.f = ~ str_count(string = df_text$text , pattern = .x) %>% sum()) %>% # transform data from wide to long gather(key = "term", value = "num") # A tibble: 3 x 2 # term num # <chr> <int> # 1 hi 2 # 2 why here 1 # 3 see you soon 1 # end of script # ,我想检查它是否包含某个unordered_set<int> S

我是否可以编写类似int x的类似if(S.contains(x)){ /* code */ }的东西?

它可以是宏,也可以是其他任何东西,但是我发现编写这样的简单查找方法很丑陋,而且不必要地长。

2 个答案:

答案 0 :(得分:3)

不是使用std::unordered_set的{​​{1}}成员函数来确定是否存在给定键find(),如下所示:

x

您可以简单地使用{{3}}成员函数:

if (S.find(x) != S.end()) { /* code */ }

if (S.count(x)) { /* code */ } 不允许重复,因此std::unordered_set将返回count()0


1成员函数的效率不应该比unordered_set::count()低,因为一旦找到一个元素,就可以停止遍历所有元素,以找出请求的键的数量。不能重复。

答案 1 :(得分:2)

我认为您需要if(S.count(x)){//do something}。 根据{{​​3}},count函数在容器中搜索值为k的元素,并返回找到的元素数。因为unordered_set容器不允许重复值,所以这意味着如果容器中存在具有该值的元素,则该函数实际上返回1,否则返回零。