STL セットを使用した BartoszKP のソリューションは、おそらく最もシンプルなソリューションです。
あなたが本当に熱心なら、次のようなもので貧乏人のハッシュをシミュレートできます:
const unsigned nIdle('ELDI'); // "IDLE" with byte order reversed
const unsigned nStarted('RATS'); // "STAR" with byte order reversed
const unsigned nStopped('POTS'); // "STOP" with byte order reversed
const unsigned nPaused('SUAP'); // "PAUS" with byte order reversed
bool Verify(const char *szState)
{
unsigned nState = *reinterpret_cast<const unsigned *>(szState);
switch (nState)
{
case nIdle:
case nStarted:
case nStopped:
case nPaused:
return true;
default:
return false;
}
}
int main()
{
const std::string s[] = {"IDLE", "STARTED", "STOPPED", "PAUSED", "INVALID"};
for (auto itr=std::begin(s); itr!=std::end(s); ++itr)
{
std::cout << *itr << '\t';
if (Verify(itr->c_str()))
std::cout << "OK";
else
std::cout << "Fail";
std::cout << std::endl;
}
return 0;
}
データを確認する必要があります。sizeof(unsigned) より短い文字列は危険である可能性があり、文字列が最初の 4 バイトで一意であることを確認する必要があります。たとえば、"STOPPED" と "STOPPING" は 4 バイトで同じです。
適切なハッシュを行うこともできますが、文字列を比較するよりも高速ではない可能性があります。