2012-12-08 4 views
0

괜찮 았어.이 코드는 정말 쉽지만,이 코드는 부스트 라이브러리를 구현하고있다. 올바르게 작동하도록하는 것 같습니다. 여기에 코드가 있습니다.부스트 라이브러리, C++로 정렬되지 않은 세트는 나에게 두통을 준다.

#include ..... 
#include "boost/unordered_set.hpp" 
#ifndef HASH_H 
#define HASH_H 

class hash{ 
public: 
    int toHash(string); 
    void insertKey(string); 
    bool lookupKey(string); 
private: 
    string hashTable[]; 
    vector<string> vfile; 
    typedef boost::unordered_set<std::string, int> um; 
struct hashkey{ 
    string state; 
    int stateno; 
}; 

}; 

#endif /* HASH_H */ 

hash.h 또한 hash.cpp

#include <boost/unordered/unordered_set.hpp> 
#include "hash.h" 

int hash::toHash(string key){ 
    unsigned int x; 
    std::stringstream ss; 
    ss << std::hex << key; 
    ss >> x; 
    return x; 
} 

void hash::insertKey(string key){ 
    um.insert(key,toHash(key)); 
} 

bool hash::lookupKey(string key){ 
    return um.find(key)==um.end(); 
} 

나는군요 "hash.cpp : '.'토큰 전에 예상 비정규-ID 18 : 7 : 오류". 그리고 저는 다시 한 번 강조해 보았습니다. 아마도 꽤 쉽다는 것을 알고 있습니다. 인터네트에서 많은 예제를 살펴 봤는데이 "단순한"작품을 얻는 것만으로는 부족합니다. 감사합니다.

+1

Nitpicking하지만 헤더에 전체 파일을 감싸 야합니다. 그렇지 않으면 동일한 파일을 여러 번 포함 할 수 있습니다 (적절한 헤더 포함 경비가없는 경우). –

답변

0

um은 멤버 변수가 아니므로 typedef입니다. typedef 키워드를 제거하십시오. 두 번째 문제에 관해서는 이제

......

가 당신의 해시 계산 멤버 메소드 & 템플릿의 두 번째 인수 제거하십시오. insert()의 두 번째 arg를 제거하십시오. boost unordered_set는 std :: string을 포함하여 많은 표준 유형에 대해 이미 해시 함수를 제공합니다. 그러나 사용자 정의 유형을 해시하려면 해시 함수를 제공해야하지만 여기서는 해시 함수를 제공하지 않아야합니다.

std::size_t hash_value(yourUserDefinedType_probablyAClassName const &t) 
{ 
    std::size_t retValue; 
    //...compute your hash however you want & store in retValue.... 
    return retValue; 
} 
+0

nope. 내가 typedef 제거하면 얻을 : hash.cpp : 18 : 30 : 오류 : '부스트 :: unordered :: unordered_set , :: :: insert (std :: string & int) ' –

+0

@crazy_pants - 별개의 문제입니다. 나는 그 대답을 편집했다. – phonetagger

0

당신은 유형을 선언하는 형식 정의를 사용 :이 같은 hash_value()라는 함수의 과부하를 만들 것입니다. 음, 변수가 아니라 유형입니다. 코드에서 typedef를 제거하거나 um 유형의 변수를 선언하십시오.

+0

아니, 만약 내가 .... .... '코드'음 um2; 다음 .cc 'code'um2.insert (key, toHash (key)); 나는 완전히 오류가 있습니다. 'boost :: unordered :: unordered_set , int> :: insert (std :: string &, int)'에 대한 호출과 일치하는 함수가 없습니다. 거룩한 예수님 왜 이것이 코드 형식을 이해하지 못합니까?!?!?! –

+0

@crazy_pants - 주석에서'this like'와'backquotes '사이에 코드를 넣으십시오. 그러면 여러분이 입력 한 원시 char가 유지됩니다. – phonetagger

+0

아, 내가 그 모범을 오해 한 것 같아. '이거 좋아? ' –