unordered_map的C#语法

时间:2017-01-12 01:03:21

标签: c#

我正在努力将以下C ++代码转换为等效的C#函数,我必须承认我没有使用C ++的经验。我真的很感激这次转换的一些帮助。

具体来说:

  1. 我知道unordered_map是C#中的字典,但是在声明中传递的strings( (max_code * 11) / 10 )是等价的吗?

  2. C#中INPUT &input, OUTPUT &output的等价物是什么? - 我想将一个字节数组传递给这个函数并返回一个字节数组。

  3. ...谢谢

    void decompress( INPUT &input, OUTPUT &output, const unsigned int max_code = 32767  )
    {
        input_code_stream<INPUT> in( input, max_code );
        output_symbol_stream<OUTPUT> out( output );
    
        std::unordered_map<unsigned int,std::string> strings( (max_code * 11) / 10 );
        for ( int unsigned i = 0 ; i < 256 ; i++ )
            strings[i] = std::string(1,i);
        std::string previous_string;
        unsigned int code;
        unsigned int next_code = 257;
        while ( in >> code ) {
            if ( strings.find( code ) == strings.end() ) 
                strings[ code ] = previous_string + previous_string[0];
            out << strings[code];
            if ( previous_string.size() && next_code <= max_code )
                strings[next_code++] = previous_string + strings[code][0];
            previous_string = strings[code];
       }
    }
    

1 个答案:

答案 0 :(得分:0)

回答第一个

在C#中没有直接等同于strings( (max_code * 11) / 10 )。由于C#将其桶的大小等于第一个素数(来自它们的魔术素数列表(https://referencesource.microsoft.com/#mscorlib/system/collections/hashtable.cs,19337ead89202585,references)),这大于字典中元素的数量。在C ++中,您可以在地图中指定最小数量的存储桶。

要在C#中实现与它接近的内容,您可以使用字典构造函数的capacity参数来指定字典的最小容量。

但是你必须记住,桶的数量仍然不会是你期望从C ++获得的数量。实施例

我们假设max_code为12。

strings( (max_code * 11) / 10 )

将有13个桶。

但是在C#中如下

new Dictionary<int,string>(capacity: (max_code * 11) / 10);

将有17个桶。