Связанный .lib-файл связан с .dll
У меня была такая же проблема. Скажем, у меня есть проекты MyProject и TestProject. Я эффективно связал файл lib для MyProject с TestProject. Однако этот файл lib был создан, так как была построена DLL для MyProject. Кроме того, я не содержал исходный код для всех методов в MyProject, но только доступ к точкам входа DLL.
Чтобы решить проблему, я построил MyProject как LIB и связал TestProject с этим .lib-файлом (скопируйте вложенный файл .lib в папку TestProject). Затем я смогу снова создать MyProject как DLL. Он компилируется, поскольку lib, с которым связан TestProject, содержит код для всех методов в классах MyProject.
Нет; сбалансированное дерево не нужно хранить количество потомков каждого узла, что требуется для более быстрого вычисления distance( s.begin(), iter )
для std::set s
и итератора iter
(что, как вы полагаете, означает). Поэтому информация просто не существует, кроме как путем подсчета элементов по одному.
Если вам нужно выполнить много таких вычислений, скопируйте set
в отсортированную последовательность случайного доступа, такую как vector
или deque
, но затем модификация последовательности становится дорогой.
Структура дерева данных, которая делает то, что вы просите, вероятно, существует в свободной библиотеке где-то, но я не знаю об этом.
То, что вы ищете, называется деревом статистики по порядку . Если вы используете библиотеку GNU C ++, у вас должно быть расширение, доступное для построения статистики статистики заказов. Ниже приведен краткий пример:
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <cstdio>
using namespace std;
using namespace pb_ds;
typedef tree<
int, /* key type */
null_mapped_type, /* value type */
less<int>, /* comparison */
rb_tree_tag, /* for having an rb tree */
tree_order_statistics_node_update> order_set;
int main()
{
order_set s;
s.insert(10);
s.insert(20);
s.insert(50);
s.insert(25);
printf("rank of 25 = %d\n", s.order_of_key(25));
}
Выход должен быть rank of 25 = 2
. Дополнительные примеры: этот файл .
Функциональность сортированного вектора, предложенная @Potatoswatter, обеспечивается flat_set
из Boost.Container . В документации перечислены следующие компромиссы