typedef std::map<uint16_t, uint32_t> TSrcMap;
TPSrcMap sp;
TSrcMap::iterator its;
/*Code to populate the array_start.*/
/*Code to populate the array_end.*/
typedef struct port_count
{
uint32_t port_number;
uint32_t port_count;
}port_count_t;
port_count_t pcount[5];
memset(pcount,0,sizeof(pcount));
size_t structs_len = sizeof(pcount)/sizeof(port_count_t);
for(its = stcp.begin(); its != stcp.end();its++)
{
if(pcount[smallest_index].port_count < (*its).second)
{
pcount[smallest_index].port_count = (*its).second;
pcount[smallest_index].port_number = (*its).first;
#ifdef USEQSORT
qsort(pcount, structs_len, sizeof(port_count_t), struct_cmp_by_port_count);
#else
std::sort(pcount,(pcount+structs_len),cmp_by_port_count);
#endif
}
}
#ifdef USEQSORT
/* qsort struct comparision function compare port frequency*/
int struct_cmp_by_port_count(const void *a, const void *b)
{
port_count_t *ia = (port_count_t *)a;
port_count_t *ib = (port_count_t *)b;
return (ia->port_count - ib->port_count);
}
#else
/* qsort struct comparision function compare port frequency*/
int cmp_by_port_count(const port_count_t& a, const port_count_t& b)
{
return (a.port_count < b.port_count);
}
#endif
port_countをport_numberにマップする大きなstd::map構造があります。port_countに基づいて最大の5つの要素を見つける必要があります(ここで、keyはport_numberです)。ソートアルゴリズムを呼び出す上記の単一の解析ループがあります(サイズ5の配列でqsortまたはstd::sort)これを実現するための最も効率的な方法ですか?並べ替え関数への呼び出し数の観点から、計算効率の観点から、これを行うためのより良い方法はありますか?また、qsortとstd :: sortの両方を試しましたが、どちらもほぼ同じように機能しているようです。これは、並べ替える配列のサイズが小さすぎて大きな影響を与えられないためです。このアルゴリズムを理解しようとしています。それの複雑さの用語。どんな考えでもいただければ幸いです。