Wątek przeniesiony 2021-03-17 08:28 z Off-Topic przez Adam Boduch.

dane z pliku do map

0

Cześć, staram się rozkminić jak mogę wyeksportować pary<klucz wartość> z pliku i umieścić je w tablicy asocjacyjnej. Intuicyjnie staram się to zrobić jak w tablicy jednowymiarowej, ale coś mi nie idzie. Czy może mnie ktoś nakierować co robię nie tak?

#include <iostream>
#include <fstream>
#include <map>

using namespace std;

typedef map <int, string> H_TAB;

int main()
{

    H_TAB h_tab;

    ifstream wartoscklucz("test.txt");
    int a, b;
    while (!wartoscklucz.eof())
    {
    wartoscklucz >> a >> b;
    h_tab.insert(pair<int, string>(a, b));

    }

   H_TAB::const_iterator iMapPairLocator;
   for(iMapPairLocator=h_tab.begin();iMapPairLocator!=h_tab.end; ++iMapPairLocator())
   {
       cout<<"Klucz: "<<iMapPairLocator->first;
       cout<<"Wartosc: "<<iMapPairLocator>second.c_str();
   }

}

dane w pliku tekstowym w formacie:
klucz wartosc
klucz wartosc
klucz wartosc

1

Najsampierw zrób b stringiem a nie intem albo dobrze mapę zadeklaruj.
EDIT:

#include <map>
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>

namespace {
struct MyPair: std::pair<int, std::string> {
    using std::pair<int, std::string>::pair;
};

std::istream& operator>>(std::istream& s, MyPair& arg)
{
    s >> arg.first >> arg.second;
    return s;
}

std::ostream& operator<<(std::ostream& s, const MyPair& arg)
{
    s << arg.first << ' ' << arg.second;
    return s;
}

}

int main()
{
    std::ifstream f("in.txt");
    std::istream_iterator<MyPair> inStart(f);
    std::istream_iterator<MyPair> inStop;
    std::map<int, std::string> foo {inStart, inStop};
    for (const auto& el : foo) std::cout << el << '\n';
}                                              
3
int a;
std::string b;

while (wartoscklucz >> a >> b) {
    h_tab[a] = b;
}
0

@_0X666 Podmieniłem i dostaję błąd:no match for 'operator!=' Pogooglałem i nic nie znalazłem ;/

#include <iostream>
#include <fstream>
#include <map>

using namespace std;

typedef map <int, string> H_TAB;

int main()
{

    H_TAB h_tab;

    ifstream wartoscklucz("test.txt");
    int a;
    string b;

    while (wartoscklucz >> a >> b)
    {
    h_tab[a] = b;
    }

   H_TAB::const_iterator iMapPairLocator;
   for(iMapPairLocator=h_tab.begin();iMapPairLocator!=h_tab.end; ++iMapPairLocator())
   {
       cout<<"Klucz: "<<iMapPairLocator->first;
       cout<<"Wartosc: "<<iMapPairLocator>second.c_str();
   }

}
2

Przyjrzyj się dokładnie tej linijce

for(iMapPairLocator=h_tab.begin();iMapPairLocator!=h_tab.end; ++iMapPairLocator())

i zobacz gdzie powinny być umiejscowione nawiasy ().

Pogooglałem i nic nie znalazłem

Trzeba było poczytać dokładnie komunikaty kompilatora.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0