2012-03-13 5 views
2

これはいくつかの言語では本当に簡単ですが、他の言語ではそれほど簡単ではありません。私はC++でそれを手に入れることはできません。私は、質問のタイトルの何千行もの形式のファイルを読み込み、ファイルを何度も何度も何度も読み込んでいます。"100_4_1 - 15"のような分離した整数を読み込んで分離する方法

基本的に私のプログラムでは「100, 4, 1」というようにいくつかの整数を念頭に置いていますが、シーケンスの最後の桁が何であるかをテキストファイルで調べたいので、行は "100_4_1 - 15"です。 15を取得します。これはどうすればできますか?

答えて

1

私のプログラムでは心の中でいくつかの整数、言う "100を、4、1"、 "100_4_1 - 15"、私はそうにそれをロードし、15の

struct Key 
{ 
    int a_, b_, c_; 
    Key(int a, int b, int c) : a_(a), b_(b), c_(c) { } 
    bool operator<(const Key& rhs) const 
    { 
     return a_ < rhs.a_ || 
       a_ == rhs.a_ && b_ < rhs.b_ || 
       a_ == rhs.a_ && b_ == rhs.b_ && c_ < rhs.c_; 
    } 
}; 

typedef std::map<Key, int> Lookup_Table; 
Lookup lookup_table; 

if (std::ifstream if("filename.txt")) 
{ 
    int a, b, c; 
    char ignore_char; 
    int number; 
    while (if >> a >> ignore_char >> b >> ignore_char >> c >> ignore_char >> number) 
     lookup_table[Key(a, b, c)] = number; 
} 
else 
{ 
    std::cerr << "can't read input file...\n"; 
    exit(1); 
} 

// to find something: 
Lookup_Table::const_iterator i = lookup_table.find(Key(x, y, z)); 
if (i != lookup_table.end()) 
{ 
    // found... value accessible using *i... 
} 
1

これは数値そのものに依存します...この10,000はファイルのようですか?固定ファイルは1つだけですか?

たとえば、3つのインデックス整数とルックアップが必要な整数の場合は、すべてをメモリにロードして必要なときに参照するだけで簡単です。 C/Cで

++構造体の単純な配列は、例えば、それをうまく行うだろう:私は、その後E.FindElement(100,4,1)を使用し、15

を取得したい

#define NUMELEMENTS 1000 

struct Element { 
    int x; 
    int y; 
    int z; 
    int v; 
}; 

class Elements{ 
    elements Element[NUMELEMENTS]; 
    public: 
    int findElement(int,int,int); 
    void loadElements; 

} E; 

loadElementsは、行単位で読み込んで数値を区切ってファイルをロードします(スペースを削除し、スペースを削除し、ダッシュとアンダースコアを統合し、区切り文字の間の数字を取得します)。

findElementは、 ... 10k要素のために私はunを最適化することについて心配しません組み込み機器ではこれより少ない

+0

感謝を取得したいですメインメモリが高速になります。質問の主な部分はそれを読むことです:) – Jim

関連する問題