2008-12-04 6 views
0

Я пытаюсь использовать реализацию SGI STL, которую я загрузил со своего сайта. Я хочу использовать hashmap, потому что мне нужно хранить около 5.000.000 записей, но это должно быть хорошо: мне нужно иметь доступ к нему очень быстро. Я пробовал stedext::hash_map, но он был очень медленным, потому что я не мог установить начальный размер. Кстати, можно ли это сделать? Если я добавлю дополнительный путь к моей MS Visual Studio, я даже не могу скомпилировать пример с сайта SGI. Я получаю сообщение об ошибке:Как использовать SGI STL hash_map?

error C2061: syntax error : identifier 'T'. 

С кем-нибудь сталкивались с такими проблемами?

+2

Вы пробовали это? http://code.google.com/p/google-sparsehash/ – strager 2008-12-05 18:33:39

ответ

1

Я использовал его несколько раз без проблем, хотя я использовал его с gcc (как на windows, так и на linux), а не на Visual Studio.

Для фактического использования документации here.

Вы можете указать, сколько ковши резервировать с помощью

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; 
} 

Конечно, вы можете использовать зЬй :: строку вместо полукокса * если вы хотите:

std::hash_map<std::string, int, hash<std::string>, eqstr> months; 
0

Есть ли какие-либо другие сообщения об ошибках с указанием, когда вы пытаетесь построить/скомпилировать свой проект?
Вы упомянули вас ...

добавлен дополнительный каталог в проекта, в котором SGI STL есть.

Не могли бы вы рассказать об этом немного? Есть много мест, где вы можете добавлять каталоги в настройках проекта визуальной студии. то есть добавление дополнительных каналов заголовков, дополнительных путей к библиотеке и т. д. Где вы добавили свой каталог?

0

Звучит разумно. Какова структура вашего каталога STL? Получали ли вы все файлы SGI STL со своего сайта или только одного? Возможно, вам не хватает файла зависимостей, который приводит к ошибке, которую вы видите.

0

Я загрузил zipped версию этой библиотеки, в этом 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 

Я не является ли его более удобным ....

0

Да вы найдете только файлы заголовков, который указан на сайте SGI STL. Поскольку вы заметили, что ссылки связаны для .lib-файлов, так что не стоит ничего добавлять.

Вы компилируете пример, отправленный Дэном, все еще правильно? Возможно, вам нужно указать заголовки include, используя кавычки, а не скобки. Поэтому использовать ...

#include "hash_map" 

вместо ...

#include <hash_map> 

Это может быть проблема с тем, как включать файлы разыскивается компилятором. Как дополнительный запрос, какую версию Visual Studio вы используете?

0

Как было указано в теме, которую я заметил на дискуссионном форуме по этой проблеме, реализация SGI STL, похоже, не обновлялась в течение очень долгого времени. На странице загрузки он упоминает 8 июня 2000 года как последний раз, когда он был обновлен. Я подозреваю, что реализация SGI STL для работы в VS 2005/2008 больше проблем, чем того стоит.

Я хотел бы предложить проверить некоторые STL альтернативы ...

Оба регулярно обновляются.

 Смежные вопросы

  • Нет связанных вопросов^_^