Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得特定值的计数std::map的O(log(N))复杂度 我在思考图的特定值元素的计数问题,以及如何实现C++中的O(log(n))复杂度。只有当它按我猜的值排序时才可能,但是它不会按键排序,并且get-from映射将是O(N)_C++_Algorithm - Fatal编程技术网

如何获得特定值的计数std::map的O(log(N))复杂度 我在思考图的特定值元素的计数问题,以及如何实现C++中的O(log(n))复杂度。只有当它按我猜的值排序时才可能,但是它不会按键排序,并且get-from映射将是O(N)

如何获得特定值的计数std::map的O(log(N))复杂度 我在思考图的特定值元素的计数问题,以及如何实现C++中的O(log(n))复杂度。只有当它按我猜的值排序时才可能,但是它不会按键排序,并且get-from映射将是O(N),c++,algorithm,C++,Algorithm,在第一个版本中,我使用std::count\u if。这是我的密码: std::count_if( std::begin(_map), std::end(_map), [&val]( const std::pair<const std::string, std::string> &p ) { return p.second == val; } ); std::count\u if(std::begin(\u map),std

在第一个版本中,我使用
std::count\u if
。这是我的密码:

std::count_if( std::begin(_map), std::end(_map),
    [&val]( const std::pair<const std::string,  std::string> &p )
    {
        return p.second == val;
    } );
std::count\u if(std::begin(\u map),std::end(\u map),
[&val](常数标准::对和对)
{
返回p.second==val;
} );

它具有O(N)的复杂性。你知道还有其他容器对解决这个问题有用吗?我在考虑树形图,但可能会有类似的按键排序的问题。

您可以维护两个映射,这样项目将同时按键和值进行索引。您需要一个允许重复值的映射。

您可以维护两个映射,这样项目将同时按键和值进行索引。你需要a来允许重复的值。

根据你的容器的其他典型用法,你可以考虑使用<代码> STD::vector < /代码>而不是映射。你必须自己做排序,但是你可以对键或值进行排序,然后进行二进制搜索。

根据你可以考虑的容器的其他典型用法,使用<代码> STD::vector < /COD>而不是映射。您必须自己进行排序,但您可以对键或值进行排序,然后进行二进制搜索。

Boost允许按键或值进行查找

auto range = map.right.equal_range(val);
std::distance(range.first, range.second);
Boost允许通过键或值进行查找

auto range = map.right.equal_range(val);
std::distance(range.first, range.second);

我也在考虑这个问题,但它会使内存使用量翻倍,这将是大地图的问题。我正在考虑这个解决方案,因为我也在考虑这个问题,但它会使内存使用率翻倍,这将是大地图的问题。我正在考虑将此解决方案作为一种折衷方案谢谢,您建议如何排序以满足时间复杂度限制?@PPM根据值排序是
O(N logN)
,尽管您只需要排序一次,然后可以使用
O(log N)
二进制搜索(
std::binary\u search
)谢谢,您建议如何排序以满足时间复杂度限制?@PPM根据值排序是
O(N logN)
尽管您只需要排序一次,然后就可以使用
O(logN)
二进制搜索(
std::binary_search
)哇,这看起来真的很好,我认为这给了我迄今为止的大部分功能哇,这看起来真的很好,我认为这给了我目前为止最强大的能力