私は専門map
の定義に助けが必要なので、コンパイルのために特殊なmap :: iteratorを得ることはできません。std :: mapクラスのイテレータを定義する方法
find()
コールのためにこのイテレータをどのように定義する必要がありますか?
コード:
// My case-insensitive-less functor, which has historically worked fine for me:
struct ci_less : std::binary_function<std::string, std::string, bool>
{
// case-independent (ci) compare_less binary function
struct nocase_compare : public std::binary_function<unsigned char,unsigned char,bool>
{
bool operator() (const unsigned char& c1, const unsigned char& c2) const {
return tolower (c1) < tolower (c2);
}
};
bool operator() (const std::string & s1, const std::string & s2) const {
return std::lexicographical_compare (s1.begin(), s1.end(),
s2.begin(), s2.end(),
nocase_compare()); // comparison
}
};
//My offending code:
template <class T>
class CaseInsensitiveMap : public map<string, T, ci_less>
{
public:
// This one actually works, but it requires two "find()" calls.
// I can't ethically call find twice.
const T* lookup(const T& key) const {
if (find(key) == map<string, T, ci_less>::end()) return 0;
else return &find(key)->first;
}
// This one complains with errors shown below.
T* lookup(const T& key) {
CaseInsensitiveMap<T>::iterator itr = find(key);
if (itr == map<string, T, ci_less>::end()) return 0;
else return itr->second;
}
};
エラー:あなたはSTLコンテナを継承してはならない、とにかく
typename CaseInsensitiveMap<T>::iterator itr = find(key);
:
In member function
'T* CaseInsensitiveMap<T>::lookup(const T&)'
:
error: expected';'
before'itr'
error:'itr'
was not declared in this scope
私は 'のstd :: map'がから継承されることを意図したとは思いません。 – chris
今後、外部サイトにリンクするのではなく、コードとエラーをインラインで投稿してください。 – ildjarn