Siv3D / OpenSiv3D

C++20 framework for creative coding 🎮🎨🎹 / Cross-platform support (Windows, macOS, Linux, and the Web)
https://siv3d.github.io/
MIT License
994 stars 136 forks source link

Statistics::Mode(), Statistics::MultiMode()でビルドエラー #1214

Closed tyanmahou closed 5 months ago

tyanmahou commented 5 months ago

エラーの内容 | Describe the build error Statistics::MultiModeでビルドエラーします。 存在しないメソッドを呼んでいるようです。

エラー C2039   'value': 'phmap::priv::raw_hash_set<Policy,Hash,Eq,Alloc>::iterator' のメンバーではありません
        with
        [
            Policy=phmap::priv::FlatHashMapPolicy<ValueType,std::pair<Count,Index>>,
            Hash=phmap::Hash<double>,
            Eq=phmap::EqualTo<ValueType>,
            Alloc=std::allocator<std::pair<const ValueType,std::pair<Count,Index>>>
        ]   OpenSiv3D_0.6.141   D:\home\Documents\Siv3D\OpenSiv3D_0.6.14\include\Siv3D\detail\Statistics.ipp    260     

再現方法 | To Reproduce

Array<double> ar{ 1,1,2,2,3,3,3,4,5,5 };
auto multiMode = Statistics::MultiMode(ar.begin(), ar.end());

ビルド環境 | Develop environment (please complete the following information):

備考 | Additional context

Reputeless commented 5 months ago

Statistics::Mode() でも同様の問題を確認しました。昔のバージョンの HashTable 向けに書かれていたのが原因です。 v0.6.15 で修正します。ご報告ありがとうございました。

# include <Siv3D.hpp> // Siv3D v0.6.14

void Main()
{
    {
        Array<double> ar{ 1,1,2,2,3,3,3,4,5,5 };
        auto multiMode = Statistics::MultiMode(ar.begin(), ar.end());
        Print << multiMode;
    }

    {
        Array<double> ar{ 1,1,2,2,3,3,3,4,5,5 };
        auto mode = Statistics::Mode(ar.begin(), ar.end());
        Print << mode;
    }

    while (System::Update())
    {

    }
}