如何在 c++ 中对两个向量进行线性搜索?
How to do a linear search of two vectors in c++?
更新: 我的代码有效,但此代码之外有问题。
我有两个向量包含类书籍的对象。 一个矢量包含新书籍,另一个矢量包含请求的书籍。我正在尝试创建一个线性搜索函数来计算两个向量之间的匹配书籍数量。
这是我的线性搜索函数:
int linear(vector<Books> New, vector<Books> Requested){
int matches = 0;
for (int i = 0; i < New.size(); i++){
for (int j = 0; j < Requested.size(); j++){
if (New[i].convstr() == Requested[j].convstr())
matches++;
}
}
cout << matches << endl;
}
我还有一个 convstr(( 函数将对象转换为字符串以比较它们(在类 书籍 它是公共的(:
string Books::convstr(){
string strisbn;
strisbn = to_string(isbn);
return strisbn + language + type;
}
每当我输入两个向量并尝试打印匹配数时,即使有匹配,它也总是打印零。
正如@Jarod42所说,您可以使用std::set_intersection
来解决此问题O(n log n)
。如果对数组进行排序,则此代码段正在执行这项工作。
#include <algorithm>
template <typename T>
T getCommonItems(T &container_0, T &container_1) {
T cache;
cache.reserve(std::min(container_0.size(), container_1.size()));
std::set_intersection(container_0.begin(), container_0.end(), container_1.begin(), container_1.end(),
std::back_inserter(cache));
return cache;
}
对于初学者来说,函数应该至少像
size_t linear( const vector<Books> &New, const vector<Books> &Requested );
否则,将创建矢量的冗余副本。
同样假设向量不包含重复的书籍,第二个循环可以缩短。
至于你的函数实现,那么你忘了返回变量matches
的值。
函数可以通过以下方式定义
#include <iterator>
#include <algorithm>
//...
size_t linear( const vector<Books> &New, const vector<Books> &Requested )
{
size_t matches = 0;
for ( const auto &book : New )
{
if ( std::find_if( std::begin( Requested ), std::end( Requested ),
[&book]( const auto &item ) { return book.convstr() == item.convstr(); } ) != std::end( Requested ) )
{
++matches;
}
}
return matches;
}
请注意,成员函数 convstr 应使用限定符const
声明。例如
bool convstr() const;
相关文章:
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 查找两个排序向量中共有的元素
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 如何根据两个因素组织向量:id 和数量?(C++)
- 在C++中查找两个向量之间最相似的值
- 如何在C++中从两个向量生成所有可能的对?
- 返回两个向量 – 使用引用还是元组?
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 检查两个向量是否并行的最有效方法
- 有没有办法将两个或多个不同的类链接到一个类中(稍后在向量上使用)?
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 如何获得比较两个向量对的子集
- C++将两个不同类型的向量的属性连接到新的向量中
- 如何组合两个整数向量
- 在两个类实例之间共享向量
- 如何在 c++ 中对两个向量进行线性搜索?
- 如何在 c++ 中从两个向量创建 JSON 对象?
- 为什么具有两个元素的发起器语法将一个元素而不是两个元素放入字符串向量中?