0

サイトからダウンロードした SGI STL 実装を使用しようとしています。約 5,000,000 件のレコードを保存する必要があるため、ハッシュマップを使用したいと考えていますが、それは適切なはずです。非常に迅速にアクセスできるようにする必要があります。を試してみましstedext::hash_mapたが、初期サイズを設定できなかったため、非常に遅くなりました。ところで、それは可能ですか?MS Visual Studio に追加のパスを追加すると、SGI サイトの例をコンパイルすることさえできなくなります。エラー メッセージが表示されます。

error C2061: syntax error : identifier 'T'.

他の誰かがそのような問題に直面しましたか?

4

7 に答える 7

2

私は自分で試したことがないことを告白しますが、VS2008は以下を含むTR1をサポートすることになっています。

#include <tr1/unordered_map>

「機能パック」リリースに含まれています。 http://www.microsoft.com/downloads/details.aspx?FamilyId=D466226B-8DAB-445F-A7B4-448B326C48E7&displaylang=en

于 2008-12-05T18:04:43.403 に答える
1

Visual Studioではなくgcc(WindowsとLinuxの両方)で使用しましたが、問題なく何度も使用しました。

実際の使い方については、ドキュメントはこちらです。

を使用して、予約するバケットの数を指定できます

void resize(size_type n)

識別子 Tに関する問題については、T という名前のテンプレート引数を実際の型に置き換えるのを忘れていると思います。わからない場合は、hash_map の使用方法のコード スニペットを貼り付けてください。

ドキュメントの例:

#include <hash_map>
#include <iostream>

struct eqstr
{
  bool operator()(const char* s1, const char* s2) const
  {
    return strcmp(s1, s2) == 0;
  }
};

int main()
{
  std::hash_map<const char*, int, hash<const char*>, eqstr> months;

  months["january"] = 31;
  months["february"] = 28;
  months["march"] = 31;
  months["april"] = 30;
  months["may"] = 31;
  months["june"] = 30;
  months["july"] = 31;
  months["august"] = 31;
  months["september"] = 30;
  months["october"] = 31;
  months["november"] = 30;
  months["december"] = 31;

  std::cout << "september -> " << months["september"] << endl;
  std::cout << "april     -> " << months["april"] << endl;
  std::cout << "june      -> " << months["june"] << endl;
  std::cout << "november  -> " << months["november"] << endl;
}

もちろん、必要に応じて char* の代わりに std::string を使用できます。

std::hash_map<std::string, int, hash<std::string>, eqstr> months;
于 2008-12-04T17:36:40.667 に答える
0

はい、SGI STL Web サイトに示されているヘッダー ファイルのみが見つかります。お気づきのように、リンクの依存関係は .lib ファイル専用であるため、何も追加しないでください。

ダンによって投稿された例をコンパイルしていますか? 括弧ではなく引用符を使用してインクルード ヘッダーを指定する必要がある場合があります。だから使って...

#include "hash_map"

それ以外の...

#include <hash_map>

コンパイラがインクルード ファイルを検索する方法に問題がある可能性があります。追加の質問として、使用している Visual Studio のバージョンを教えてください。

于 2008-12-05T15:03:46.793 に答える
0

この問題に関するディスカッション フォーラムで気付いたスレッドで指摘されたように、SGI STL 実装は非常に長い間更新されていないようです。ダウンロード ページには、2000 年 6 月 8 日が最終更新日であるとさえ記載されています。SGI STL 実装を VS 2005/2008 で動作させることは、その価値よりも面倒なことだと思います。

いくつかのSTLの代替案をチェックすることをお勧めします...

どちらも定期的に更新されます。

于 2008-12-05T17:08:34.467 に答える
0

それは合理的に聞こえます。STL ディレクトリの構造はどのようなものですか? Web サイトからすべての SGI STL ファイルを取得しましたか、それとも 1 つだけですか? 表示されているエラーの原因となっている依存ファイルが見つからない可能性があります。

于 2008-12-04T20:27:32.243 に答える
0

プロジェクトをビルド/コンパイルしようとしたときに表示される他のエラー メッセージはありますか?
あなたはあなたに言及しました...

SGI STL があるプロジェクトにディレクトリを追加しました。

それについて少し詳しく説明していただけますか?Visual Studio のプロジェクト設定には、ディレクトリを追加できる場所がたくさんあります。つまり、追加のインクルード ヘッダー パス、追加のライブラリ パスなどを追加します。ディレクトリはどこに追加しましたか?

于 2008-12-04T19:28:48.383 に答える
0

このライブラリの圧縮バージョンをダウンロードしました。その zip にはヘッダー ファイルしかありません。Linker の下に別のオプションがあります。それは追加の依存関係を呼び出しますが、そこには *.lib ファイルしかありません。私の設定のコマンドラインは次のようになります。

/Od /I "C:\SGI" /D "_MBCS" Gm /EHsc /RTC1 /MDd /Fo"Debug\\"/Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

もっと使いやすいかどうかはわかりません....

于 2008-12-04T20:39:53.373 に答える