对迭代器向量的重载<<
overloading << for vector of pairs iterator
我目前正在尝试使用find_if在对向量中查找元素。我尝试在谷歌上搜索如何重载<<运算符,它确实给了我大量关于如何重载<<的信息。它仍然让我困惑如何实现我的目标。下面是我正在使用的代码,我想在我的对 s 向量中找到提供给函数的字符串。
void Utils::findIt(string serchVal)
{
vector<pair<string, HWND>>::iterator it = find_if(s.begin(), s.end(),
[&serchVal](const pair<string, HWND>& element) { return element.first == serchVal; });
cout << "find function found : " << *it << endl;
}
我尝试过像这样重载<<运算符。
template <typename T, typename D>
void operator<<(ostream& os, vector<pair(typename T, typename D)> &lst)
{
cout << lst.begin.front();
}
我不精通重载函数,我对向量仍然很陌生。 因此,任何有关这方面的帮助将不胜感激!
您不需要在这里重载operator<<
std::vector<std::pair>
因为std::find_if
将返回指向std::vector
中找到的元素的迭代器,在这种情况下,该元素将是std::pair<std::string, HWND>
的迭代器,通过您可以使用的std::ostream
打印它,
template<typename _Ty1, typename _Ty2>
std::ostream& operator<<(std::ostream& _os, const std::pair<_Ty1, _Ty2>& _p) {
_os << _p.first << ' ' << _p.second;
return _os;
}
如果你想沿着operator<<
超载路线走下去。但是,无论如何,打印std::pair
的元素是微不足道的,因此在这里并非完全需要重载插入运算符。
问题的完整代码:
#include <iostream>
#include <vector>
#include <utility>
template <typename T, typename D>
std::ostream& operator<<(std::ostream& os, std::vector<std::pair<T, D>> &lst) {
for (const auto &p : lst) {
os << p.first << ", " << p.second;
}
return os;
}
int main() {
std::vector<std::pair<int, int>> pairs = { { 1, 2 }, { 5, 6 } };
std::cout << pairs << std::endl;
return 0;
}
循序渐进:
- 通常最好将
std::ostream&
返回到调用方代码,以便我们将void operator<<
更改为std::ostream& operator<<
原型。 在
operator<<
你只是做你想做的事。如果您在输出中pair
的数据 - 将其放在那里:for (const auto &p : lst) { os << p.first << ", " << p.second; }
相关文章:
- 迭代器类的重载前缀增量运算符会引发分段错误
- 了解运算符重载和迭代器,为什么它会打印出"wrhrwwr"?
- 迭代器和无符号整数的重载 + 运算符
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 如何实现容器的重载和模板函数的迭代器?
- 为什么标准容器迭代器不会重载"->*"?
- 前向迭代器的重载
- VC++11映射和多映射迭代器(重载)C2535
- 重载输出运算符<<以使用 STL 列表迭代器
- 迭代器 CPP,运算符重载
- 使用常量迭代器的运算符重载
- 向量迭代器在赋值重载中不兼容
- 迭代器 - vector::itrator 和 array::iterator 的重载函数
- 如何将重载增量运算符用于迭代器
- 运算符重载和迭代器混淆
- C++ 解释重载成员函数迭代器(int i = 0) 的构造"one liner":i(i) { };
- 重载迭代器类的增量运算符
- 模板和运算符重载以及迭代器
- 模板泛型树类的模板迭代器的c++操作符重载
- 重载迭代器:c++语义问题