Как упоминалось ранее, если x
уже сохранено в priority_queue
и вы измените d[x]
, вы уничтожите свою структуру данных. Очевидное решение состоит в том, чтобы удалить элемент, заменить d
и затем поместить его обратно. AFAIK, priority_queue
не разрешает удаление с произвольным доступом, поэтому вы можете использовать set
. set.begin()
возвращает самый низкий элемент.
void update(int x, int v) {
set.erase(x);
d[x] = v;
set.insert(x);
}
int getMin() {
return *set.begin();
}
Я не думаю, что это возможно сделать в Разработчике SharePoint из поля. Вы могли, вероятно, записать пользовательское действие для получения инициатора, но я не полагаю, что оно выставляется через интерфейс рабочего процесса SPD вообще.
Лучшее, которое Вы могли, вероятно, сделать, получают пользователя, который создал или изменил объект в списке, но это не обработает случаи, куда рабочий процесс был вручную выполнен.
Я могу придумать простое, но не очень сложное решение для этого, используя только SPD. Просто на шагах рабочего процесса создайте тестовый элемент во вторичном списке (возможно, в списке задач, в котором хранятся свойства workflowId и itemId для обратной ссылки), а затем выполните поиск в своем рабочем процессе в этом списке, чтобы узнать, кто является создателем этого элемента, который значение будет текущим инициатором рабочего процесса.