我一直在阅读关于溪流的内容,但是当我尝试偏离书籍完成任务时,我似乎做错了什么。无论如何这里是我的代码的开始。如果这个代码可以稍作修改,请告诉我,否则如果你能提供更好的"更多的C ++,比如"路线我会非常感激。
#include <map>
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;
std::multimap<std::string,float> _map;
istream& operator>>(istream& stream, pair<string,float> in ) {
return stream >> in.first >> in.second;
}
int main( int argc, char *argv[ ] ) {
istream is( );
do {
pair<string,float> input;
is >> input;
_map.insert(input);
} while( is );
}
编译器错误是:
[mehoggan@desktop bjarne_stroustrup]$ g++ -o map -Wall ./key_value_stats.cpp
./key_value_stats.cpp: In function ‘int main(int, char**)’:
./key_value_stats.cpp:20:15: error: no match for ‘operator>>’ in ‘is >> input’
./key_value_stats.cpp:12:10: note: candidate is: std::istream& operator>>(std::istream&, std::pair<std::basic_string<char>, float>)
./key_value_stats.cpp:22:14: warning: the address of ‘std::istream is()’ will always evaluate as ‘true’
UPDATE [0]:
删除后() 并改变:
istream& operator>>(istream& stream, pair<string,float> in ) {
到
istream& operator>>(istream& stream, pair<string,float> &in ) {
我得到了一组不同的编译器错误:
/usr/lib/gcc/i686-redhat-linux/4.5.1/../../../../include/c++/4.5.1/istream: In function ‘int main(int, char**)’:
/usr/lib/gcc/i686-redhat-linux/4.5.1/../../../../include/c++/4.5.1/istream:582:7: error: ‘std::basic_istream<_CharT, _Traits>::basic_istream() [with _CharT = char, _Traits = std::char_traits<char>]’ is protected
./key_value_stats.cpp:17:13: error: within this context
使用以下代码:
#include <map>
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;
std::multimap<std::string,float> _map;
istream& operator>>(istream& stream, pair<string,float> &in ) {
return stream >> in.first >> in.second;
}
int main( int argc, char *argv[ ] ) {
istream is;
do {
pair<string,float> input;
is >> input;
_map.insert(input);
} while( is );
}
UPDATE [1]
好的,我认为我解决了这个问题。回到Stroustrup的desk_calculator示例,我有以下代码至少编译,我将最终功能添加到其中,然后为任何感兴趣的人重新发布最终产品。
#include <map>
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;
std::multimap<std::string,float> _map;
istream& operator>>(istream& stream, pair<string,float> &in ) {
return stream >> in.first >> in.second;
}
//void print_pair( pair<string,float>
int main( int argc, char *argv[ ] ) {
istream *is = &cin;
do {
pair<string,float> input;
(*is) >> input;
_map.insert(input);
} while( is );
}
UPDATE [2]
我不认为我遇到了问题的要求,但我得到了技术方面的工作。
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
/********************************************************************
* Read a sequence of possibly whitespace-separated (name,value)
* pairs, where the name is a single whitespaace-separated word and
* the value is an integer or floating-point value. Compute and print
* the sum and mean for each name and the sum and mean for all names
* ******************************************************************/
using namespace std;
std::multimap<string,float> _map;
istream& operator>>(istream& stream, pair<string,float> &in ) {
return stream >> in.first >> in.second;
}
ostream& operator<<(ostream& stream, pair<string,float> &out ) {
return stream << "(" << out.first
<< ", " << out.second << ")" << endl;
}
int main( int argc, char *argv[ ] ) {
istream *is = &cin;
do {
pair<string,float> input;
(*is) >> input;
_map.insert(input);
} while( is->peek( ) != EOF );
ostream *os = &cout;
multimap<string,float>::iterator mit = _map.begin( );
float sum = 0.0;
while( mit != _map.end( ) ) {
pair<string,float> p_pair = (*mit);
(*os) << p_pair;
sum+=p_pair.second;
mit++;
}
float mean = static_cast<float>( sum/_map.size( ) );
(*os) << "Sum: " << sum << " Mean: " << mean << endl;
}
答案 0 :(得分:2)
使用
#include <map>
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;
std::multimap<std::string,float> _map;
istream& operator>>(istream& stream, pair<string,float>& in ) {
return stream >> in.first >> in.second;
}
int main( int argc, char *argv[ ] ) {
do {
pair<string,float> input;
cin >> input;
_map.insert(input);
} while( cin );
}
答案 1 :(得分:0)
从行中删除():
istream is();
应该是:
istream is;
或者:
istream is("text 1.2");
否则是是一个返回istream的函数。