の初期化に失敗し、任意の入力に感謝します。私は操作しようとしている大きなデータセットを持っています。私はアクティブな要素をリストに保持していて、リストがアクティブでなくなったら削除します。私はいくつかのデータ構造ですべての要素をアクティブおよび非アクティブに保ちたい。現在、マップやunordered_mapを試していますが、提案をお待ちしています。順序付けされていないマップ
マップをしようとしたとき、私は
clang++ -std=c++11 -Wall -Wextra
でコンパイルしています:
#include <map>
std::map <class1, std::string> fullMap;
//and later...
for (std::list<class1>::iterator x = l.begin(); x != l.end(); x++)
{
fullMap[(*x)] = s
}
出力が読み:
error: invalid operands to binary expression ('const class1' and 'const class1') { return __x < __y; }
私はClass1のためにオペレータ未満をオーバーロードしているにもかかわらず。 このエラーはマップのオーバーロードされたブラケット演算子で発生します。 私はunordered_mapに格納しようとしました。
#include <unordered_map>
std::unordered_map <class1, std::string> fullMap;
、プログラムはさらに混乱してfullMapの初期化で失敗:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/include/g++-v4/bits/hashtable_policy.h:830:23: error: implicit instantiation of undefined template 'std::hash' bool __use_ebo = !__is_final(_Tp) && __is_empty(_Tp)> ^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/include/g++-v4/bits/hashtable_policy.h:1073:15: note: in instantiation of default argument for '_Hashtable_ebo_helper<1, std::hash >' required here private _Hashtable_ebo_helper<1, _H1>, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/include/g++-v4/bits/hashtable_policy.h:1403:12: note: in instantiation of template class 'std::__detail::_Hash_code_base >, std::__detail::_Select1st, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, true>' requested here : public _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash, ^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/include/g++-v4/bits/hashtable.h:175:14: note: in instantiation of template class 'std::__detail::_Hashtable_base >, std::__detail::_Select1st, std::equal_to, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Hashtable_traits >' requested here : public __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal, ^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/include/g++-v4/bits/unordered_map.h:100:18: note: in instantiation of template class 'std::_Hashtable >, std::allocator > >, std::__detail::_Select1st, std::equal_to, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits >' requested here _Hashtable _M_h; ^
main.cpp:34:44: note: in instantiation of template class 'std::unordered_map, std::hash, std::equal_to, std::allocator > > >' requested here std::unordered_map fullMap; ^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/include/g++-v4/bits/functional_hash.h:58:12: note: template is declared here struct hash;
は、私はダウンだけで、関連するチャンクにコードをカットしようとしましたが、より多くの情報があるなら、私に知らせて必要です。読んでくれてありがとう、どんな助けもありがとう。
//
// class1.hpp
// class
//
// Created by Roach on 9/3/16.
// Copyright © 2016 Roach. All rights reserved.
//
#ifndef class1_hpp
#define class1_hpp
#include <iostream>
#include <sstream>
#include <iomanip>
#include <ctime>
class class1
{
public:
class1();
class1 (const class1& t); // copy constructor
~class1(); // destructor
class1& operator = (const class1& t); // assignment operator
bool operator == (const class1& t); // comparison operator
void setSetting2 (std::string t);
void setSetting1 (std::string p);
void setSetting3 (double d);
void setSetting4 (double d);
std::tm getTime() const;
std::string getSetting2() const;
double getSetting3() const;
double getSetting4() const;
std::string getSetting1() const;
void setSetting3End (double d);
void setSetting4End (double d);
double getSetting3End() const;
double getSetting4End() const;
double getSetting3flag() const;
double getSetting4flag() const;
double getSetting3final() const; // in pips
double getSetting4final() const; // in pips
void processList (class1::class1 t);
void setNew();
//void dump (std::ostream& os) const;
private:
std::string setting1;
double setting4;
double setting3;
std::tm setting2;
double setting4End_;
double setting3End_;
bool setting4Flag_;
bool setting3Flag_;
double setting4final_; // in pips
double setting3final_; // in pips
};
// stream extraction operator
std::ostream& operator << (std::ostream& os, const class1& s);
std::istream& operator >> (std::istream& is, class1& t);
endif /* class1_hpp */
以下である私のオペレータ未満のオーバーロードされた(私はそれが最も簡潔または効率的ではありません知っている):
bool class1::operator< (const class1& t)
{
if (this->time_.tm_year < t.time_.tm_year) {return true;}
else if (this->time_.tm_year > t.time_.tm_year) {return false;}
else if (this->time_.tm_mon < t.time_.tm_mon) {return true;}
else if (this->time_.tm_mon > t.time_.tm_mon) {return false;}
else if (this->time_.tm_mday < t.time_.tm_mday) {return true;}
else if (this->time_.tm_mday > t.time_.tm_mday) {return false;}
else if (this->time_.tm_hour < t.time_.tm_hour) {return true;}
else if (this->time_.tm_hour > t.time_.tm_hour) {return false;}
else if (this->time_.tm_min < t.time_.tm_min) {return true;}
else if (this->time_.tm_min > t.time_.tm_min) {return false;}
else if (this->time_.tm_sec < t.time_.tm_sec) {return true;}
else {return false;}
}
をさて、あなたはおそらく、あなたを使用する必要が関連する操作を宣言していませんマップキーとして入力します。 –
'class1'のインターフェースを投稿できますか?また、「l」の定義は何ですか? – templatetypedef
@KerrekSB私は割り当て、等価、より小さい、ストリームの抽出と挿入、そしてすべての通常のコンストラクタをオーバーロードしました。私が気付いていないものがありますか? – Zroach