为什么这C++ STL 代码在编译中失败



>编译错误

/usr/include/c++/7/bits/stream_iterator.h:199:13:错误:不匹配 'operator<<' (操作数类型为 'std::ostream_iterator>>::ostream_type {aka std::basic_ostream}' 和 'const std::p air>'(

我未能解决这个问题。 我尝试以多种方式修复这段代码,更改 地图和配对中的配对方式

pair<int, string >
pair<int, string &>
pair<int, char *>

错误打印[对我来说]很复杂,难以消化

#include <iostream>
#include <iterator>
#include <string>
#include <map>
using namespace std;
int main(int argc, char **argv[])
{
map<int, string> science {{101,"physics"},{102,"chemistry"}};
auto itrt = ostream_iterator<pair<int, string > >(cout, ",");
copy(science.begin(), science.end(),itrt);
return 1;
}

预期成果: - 101物理,102化学,

您可以使用

ostream_iterator<pair<int, string > >

仅当您在自己的代码中定义以下重载时

std::ostream& operator<<(std::ostream& out, std::pair<int, std::string> const& p);

标准库不提供这样的重载。

为了使其更通用,您可以重载:

template <typename T1, typename T2>
std::ostream& operator<<(std::ostream& out, std::pair<T1, T2> const& p);

我认为这应该有效... (因为复制和ostream_iterator不起作用(

#include <iostream>
#include <iterator>
#include <string>
#include <map>
#include <algorithm>
#include <sstream>
using namespace std;
typedef std::pair<int ,string> PairII;
string to_s(PairII const & pii) {
stringstream ss;
ss << pii.first << " " << pii.second ;
return ss.str();
}
int main()
{
map<int, string> science {{101,"physics"},{102,"chemistry"}};
std::transform(science.begin(), science.end(),
std::ostream_iterator<std::string>(cout, " , "), to_s);
return 0;
}

最新更新