簡體   English   中英

C ++使用getline從文本文件數據類型讀取為結構

[英]C++ Reading from text file data type as struct using getline

我有一個文本文件形式:

a 1 b 6 e 4 h 2
r 5 q 1 a 2 e 2 b 3

高達30萬行。 每個字符都有其值。 我想逐行讀取此文件,並在同一行中的每個2個字符之間進行配對。 第一行的結果:

(a,b)
(a,e)
(a,h)
(b,e)
(b,h)
(e,h) 

我也計算每一對的頻率。 該代碼:

    using namespace std;

    std::map<std::pair< char, int>, int>  CharP;

    struct Mydata
    {
        char myString;
        float value;


         friend std::istream &operator>>(std::istream &is, Mydata  &d) {
        {
                    string line;
            std::getline(is,line);
            return is >> d.myString>> d.value;

        }
    };


    int main()
    {
        std::ifstream in("Data.txt");



            std::vector<Mydata> data{ std::istream_iterator<Mydata>(in), std::istream_iterator<Mydata>() };

            for (std::vector<Mydata> ::iterator current = data.begin(); current != data.end(); ++current)
            {
                char a = current->myString;
                for (std::vector<Mydata> ::iterator current2 = ++current; current2 != data.end(); ++current2)
                {
                    char b = current2->myString;

                    auto itt = CharP.find(std::make_pair(b, a));

                    ++CharP[(itt != CharP.end()) ? std::make_pair(b, a) : std::make_pair(a, b)];

                } 
--current;

            }





        cout << " \nPress any key to continue\n";
        system("PAUSE");
        return 0;
    }

我收到此錯誤:二進制'>>':沒有找到采用類型為'Mydata'的右側操作數的運算符(或者沒有可接受的轉換)。

我還有一個問題,因為我的文件很大,所以我想知道是否有比附加代碼更快的方法。

如果沒有查看其余代碼,我想我可以肯定地說這是問題所在:

 friend std::istream& getline(std::istream &is, Mydata &d) 

您是否打算在此聲明中重載提取器 如果是這樣,您應該知道提取器是一個運算符 ,即operator>>() getline替換為>>

 friend std::istream& operator>>(std::istream &is, Mydata &d); 

另外,以下內容非常不可讀:

 ++CharP[(itt != CharP.end()) ? std::make_pair(b, a) : std::make_pair(a, b)]; 

替換為:

  if (itt != CharP.end()) { auto p = std::make_pair(b, a); ++CharP[p]; } else { auto p = std::make_pair(a, b); ++CharP[p]; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM