编译错误
/ usr / include / c ++ / 7 / bits / stream_iterator.h:199:13:错误:没有匹配项 ‘operator <<’(操作数类型为‘std :: ostream_iterator>> :: ostream_type {aka std :: basic_ostream}”和“ const std :: pair>”)
我没有解决这个问题。 我尝试以多种方式修复这段代码, 地图和配对中的配对方式
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化学,
答案 0 :(得分:4)
您可以使用
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);
答案 1 :(得分:0)
我认为这应该有效... (因为copy和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;
}