本文整理汇总了C++中multiset::comparator方法的典型用法代码示例。如果您正苦于以下问题:C++ multiset::comparator方法的具体用法?C++ multiset::comparator怎么用?C++ multiset::comparator使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类multiset
的用法示例。
在下文中一共展示了multiset::comparator方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: multiset_put
/**
* Adds a key to the multi-set.
*
* @param me The multi-set to add to.
* @param key The key to add.
*
* @return 0 No error.
* -ENOMEM Out of memory.
*/
int multiset_put(multiset me, void *const key)
{
if (!me->root) {
struct node *insert = multiset_create_node(me, key, NULL);
if (!insert) {
return -ENOMEM;
}
me->root = insert;
return 0;
}
struct node *traverse = me->root;
while (true) {
const int compare = me->comparator(key, traverse->key);
if (compare < 0) {
if (traverse->left) {
traverse = traverse->left;
} else {
struct node *insert = multiset_create_node(me, key, traverse);
if (!insert) {
return -ENOMEM;
}
traverse->left = insert;
multiset_insert_balance(me, insert);
return 0;
}
} else if (compare > 0) {
if (traverse->right) {
traverse = traverse->right;
} else {
struct node *insert = multiset_create_node(me, key, traverse);
if (!insert) {
return -ENOMEM;
}
traverse->right = insert;
multiset_insert_balance(me, insert);
return 0;
}
} else {
traverse->count++;
me->size++;
return 0;
}
}
}