Алгоритм, который использует std::sort
, не указан. Используя функцию сравнения, которая не соответствует требованиям, установленным стандартом, вы нарушаете предположения алгоритма и вызывают неопределенное поведение.
Посмотрите, что происходит на выходе этой функции шумового сравнения, которая использует <=
(который не является допустимым компаратором) вместо <
(что действительно) .
http: //coliru.stacked -crooked.com/a/34e4cef3280f3728
На выходе я печатаю добавочную переменную (для ссылки, чтобы указать, когда алгоритм идет haywire) , затем значением первого аргумента и его положением в векторе, а затем вторым аргументом и его положением в векторе. Пример выглядит следующим образом:
124: 2@12 <= 4@7
Это означает, что это 124-й вызов функции сравнения, и он сравнивает значение 2 с индексом 12 со значением 4 с индексом 7.
Вещи сходят с ума, начиная с строки 37
37: 0@0 <= 0@-1
38: 0@0 <= 144@-2
39: 0@0 <= 0@-3
40: 0@0 <= 192@-4
. Это сравнение значений, которые я даже не вставлял в вектор (144, 192 и т. д.), а также в индексы вне диапазон вектора (отрицательные индексы, в данном случае).
INSERT .... ON DUPLICATE
не существует в SqLite. Но вы можете использовать INSERT OR REPLACE
для достижения эффекта следующим образом.
INSERT
OR REPLACE
INTO
text (id, text)
VALUES
(150574,
(SELECT
CASE
WHEN exists(SELECT 1 FROM text WHERE id=150574)
THEN 'good'
ELSE 'Hello'
END
)
)