假设我有一个# 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 */ }
的东西?
它可以是宏,也可以是其他任何东西,但是我发现编写这样的简单查找方法很丑陋,而且不必要地长。
答案 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,否则返回零。